3

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

任何人都知道如何在构建期间或之后强制重新编译组件内的 Sightly Java?

4

3 回答 3

2

需要验证的几件事:

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

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

希望这有帮助。

于 2015-11-06T16:28:17.650 回答
1

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

于 2015-11-10T16:15:19.857 回答
0

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

  • 允许扩展类。由于某种原因,从组件文件夹扩展类时编译是不可预测的。
  • 更简单的 IDE 设置。视图模块中组件文件夹中的 Java 类具有特定于 Sling 的文件夹结构,因此让 IDE 提供代码帮助需要额外的努力。
  • Sling 文件夹约定遵循 URI 实践,可能有破折号,Java 包不能有破折号... import apps.my-cool-project.components.pages.base.Header; // 不会编译
于 2015-11-08T18:57:00.473 回答