我目前正在使用CQ5 / AEM,我们有一个@Reference注释,它似乎与注入器注释的方式类似。
我们的问题是我们的POM文件中存在配置错误,导致注入失败。
我们不得不逐段更改POM文件,以确定导致问题的原因。蛮力显然不是最好的方法。
其他框架中有哪些不同的方法,比如spring,在失败时调试注释注射器?
我们非常感谢任何建议,因为我们发现这是一个很常见的问题。
致以最诚挚的问候,
Bayani
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<configuration>
<instructions>
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Embed-Directory>OSGI-INF/lib</Embed-Directory>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>
我们在删除配置后修复了它。
然而,通过设置复制器依赖性和提供的范围也解决了它。
<dependency>
<groupId>com.day.cq</groupId>
<artifactId>cq-replication</artifactId>
<version>5.4.24</version>
<scope>provided</scope>
</dependency>
我的核心问题仍然是,鉴于我们只让@Reference为null,如果只是在引用上为null,你会对如何解决这个问题提出任何建议吗?
答案 0 :(得分:1)
@Reference不是特定于CQ的,它由Apache Felix maven-scr-plugin处理,以生成OSGi Declarative Services(DS)的元数据。
在你的情况下,你并没有说“注射失败”。
如果您的问题在构建时发生,则可能是由于maven-scr-plugin配置错误,在这种情况下,DS元数据将无法正确生成。该元数据是在target / scr-plugin-generated / OSGI-INF下生成的,您可以根据DS规范检查其中的文件,以检查它们是否正确。在那里生成的XML元数据文件的语法相当简单,并在DS规范中记录。另请注意mvn -X
在构建时输出调试信息,这可能有助于解决此类问题。
另一方面,如果构建和DS元数据正常但在构建时不满足引用,则可以通过OSGi控制台(在Sling和CQ5中的/ system / console下)检查所需的OSGi服务是否为现在,如果没有检查系统日志可能的原因或在Java级别调试服务模块。