1

我目前正在使用 CQ5/AEM,我们有一个 @Reference 注释,它的作用似乎与注入器注释类似。

我们的问题是我们的 POM 文件中的配置错误,导致注入失败。

我们不得不逐节暴力更改 POM 文件,以确定导致问题的原因。蛮力显然永远不是最好的方法。

其他框架(例如 spring)在注释性注入器失败时有哪些不同的方法来调试它们?

任何建议将不胜感激,因为我们发现这是一个足够普遍的问题。

此致,

巴亚尼


           <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 开始时为空,你对如何解决这个问题有什么建议吗?给定一个参考?

4

1 回答 1

1

@Reference 并非特定于 CQ,它由Apache Felix maven-scr-plugin处理,以生成OSGi 声明式服务(DS) 的元数据。

你不是说在你的情况下“注射刚刚失败”。

如果您的问题发生在构建时,可能是由于 maven-scr-plugin 配置错误,在这种情况下,将无法正确生成 DS 元数据。该元数据是在 target/scr-plugin-generated/OSGI-INF 下生成的,您可以根据 DS 规范检查其中的文件以检查它们是否正确。那里生成的 XML 元数据文件的语法相当简单,并记录在 DS 规范中。还要注意mvn -X哪些在构建时输出调试信息,这可能有助于解决此类问题。

另一方面,如果构建和 DS 元数据正常,但在构建时不满足引用,您可以通过 OSGi 控制台(在 Sling 和 CQ5 中的 /system/console 下)检查所需的 OSGi 服务是否存在,并且如果没有,请检查系统日志以查找可能的原因或在 Java 级别调试服务模块。

于 2013-05-08T08:17:36.067 回答