2015-11-05 44 views
3

我最近開始在AEM 6.1中使用Sightly,它允許Java文件與組件位於同一文件夾中並使用WCMUse類。然而,我注意到,每當我做一個Maven構建時,涉及對頁面功能操作的那些Java文件之一進行更改,就好像Java類沒有被更改一樣,儘管crx中的Java文件確實包含了這些更改。作爲一種解決方法,我已經能夠修改crx中的Java文件,保存它,然後修改它並再次保存以更新功能,但是我沒有在所有實例上具有該功能。AEM 6.1 Sightly Java類不會在構建版本上更新

任何人都有一個想法,如何強制在構建期間或之後在組件內重新編譯Sightly Java?

+0

不是一個解決方案..但你在做你的所有實例的Maven構建..作者和發佈? –

+0

是的,我通常將maven構建爲兩個發佈實例和一個作者實例。 – Vortexcalm

+0

作爲完整性檢查,從文件夾中刪除java文件(將它們保存到某處),做一個maven構建,並檢查您使用Sightly的頁面。顯然你應該在頁面上看到錯誤。如果沒有,那麼檢查你擁有java源代碼的位置。如果你確實看到錯誤,那麼maven正在挑選正確的文件是一個好兆頭。把他們放回去試試。同時檢查Java文件是否有正確的軟件包名稱,以確保它們被正確打包。 –

回答

2

有幾件事情來驗證:

1-你更改軟件的版本做一個Maven構建時/部署?某些時候,如果您的zip或jar文件中沒有-SNAPSHOT,則在Maven部署時,AEM不會更新代碼。

2 - 有沒有在/ var /班/悅目的CRX/DE,你可以刪除編譯的類,我想即使在系統控制檯中有一個條目

希望這有助於。

+0

第二部分最終導致我回答了這個問題。我現在已經在構建過濾器中包含了/ var/classes,在構建過程中清除了該目錄。然後用Sightly Java渲染頁面會導致Java類重新編譯,從而提供更新的功能。 – Vortexcalm

0

希望別人能回答爲什麼發生這種情況,以及如何避免它。面對這個問題多次,我開始考慮將Java代碼放入組件文件夾中並不是一個好主意。使用帶有Services/Core包的Maven多模塊項目,所有Java代碼都可以到達那裏。從視圖中調用它只需要使用完全限定的類名(包括包)。將Java放入服務包中有以下好處

  • 允許擴展類。出於某種原因,從組件文件夾擴展類時編譯是不可預知的。
  • 更簡單的IDE設置。視圖模塊中的組件文件夾中的Java類具有特定於Sling的文件夾結構,因此讓IDE提供代碼幫助需要額外的努力。
  • Sling文件夾約定遵循URI實踐並可能有破折號,Java程序包不能具有破折號... import apps.my-cool-project.components.pages.base.Header; //不會編譯
+0

雖然我完全同意你的看法,但是還有一個方面就是接受這個組件,並在任何誘惑你的地方使用它......除非你使用繼承,而不是你在Java bundle中需要它。 – Bambara

1

班巴拉實際上幫我找到了我需要的答案。事實證明,/ var/classes文件夾包含編譯好的文件,但它不會自然重新編譯構建。在構建上刪除該文件夾,然後運行使用視覺代碼的頁面將強制重新編譯並顯示新功能。