AEM 6.1很明显Java类不会在构建时更新

AEM 6.1很明显Java类不会在构建时更新,java,aem,sightly,Java,Aem,Sightly,我最近开始在AEM 6.1中使用Sightly,它允许Java文件与组件位于同一文件夹中,并使用WCMUse类。然而,我注意到,每当我进行一个Maven构建,涉及到对其中一个Java文件的更改时,页面功能的运行就好像Java类没有更改一样,尽管crx中的Java文件确实包含这些更改。作为一种解决方法,我已经能够在crx中修改Java文件,保存它,然后修改它并再次保存以更新功能,但我并没有在所有实例上都具有这种功能 有人知道如何在构建期间或之后强制在组件中重新编译Sightly Java吗?需要验

我最近开始在AEM 6.1中使用Sightly,它允许Java文件与组件位于同一文件夹中,并使用WCMUse类。然而,我注意到,每当我进行一个Maven构建,涉及到对其中一个Java文件的更改时,页面功能的运行就好像Java类没有更改一样,尽管crx中的Java文件确实包含这些更改。作为一种解决方法,我已经能够在crx中修改Java文件,保存它,然后修改它并再次保存以更新功能,但我并没有在所有实例上都具有这种功能


有人知道如何在构建期间或之后强制在组件中重新编译Sightly Java吗?

需要验证的几点:

1-在进行maven构建/部署时,您是否更改了软件的版本?有时,如果您的zip或jar中没有快照,那么当maven部署时,AEM不会更新代码

2-在CRX/DE中有一个/var/classes/很明显,您可以删除已编译的类,我认为即使在系统控制台中也有一个条目


希望这有帮助。

希望其他人能够回答为什么会发生这种情况以及如何避免。在多次面对这一问题后,我开始认为将Java代码放入组件文件夹不是一个好主意。使用一个带有服务/核心包的maven多模块项目,所有Java代码都可以到达那里。从视图调用它只需要使用完全限定的类名(包括包)。将Java放入服务包有以下好处

  • 允许扩展类。由于某些原因,从组件文件夹扩展类时编译是不可预测的
  • 更容易的IDE设置。视图模块中组件文件夹中的Java类具有特定于Sling的文件夹结构,因此让IDE提供代码帮助需要额外的工作
  • Sling文件夹约定遵循URI实践,可能有破折号,Java包不能有破折号。。。导入apps.my-cool-project.components.pages.base.Header;//不会编译

    • 班巴拉实际上帮助我找到了我需要的答案。事实证明,/var/classes文件夹保存了编译后的文件,但它不会在构建时自然地重新编译。在生成时删除该文件夹,然后运行使用sightly代码的页面,强制重新编译并显示新功能。

      不是解决方案。。但是您是否在所有实例上进行Maven构建。。author and publish?是的,我正在进行maven构建,通常是对两个publish实例和一个author实例进行构建。作为健全性检查,请从文件夹中删除java文件(将其保存在某个位置),进行maven构建,并检查您正在使用的页面。显然,您应该在页面上看到错误。如果没有,那么检查您拥有java源代码的位置。如果您确实看到错误,那么这是一个好迹象,表明maven选择了正确的文件。把它们放回去试试。还要检查Java文件是否有正确的包名,以确保它们被打包在正确的位置。我现在将/var/classes包含到构建过滤器中,它在构建过程中清除该目录。然后,使用Sighly Java呈现页面会导致Java类重新编译,提供更新的功能。虽然我完全同意您的观点,但将该组件带到任何地方使用都有一个吸引人的方面……除非您使用继承,否则您在Java包中需要它。