当它们出现空值时,如何调试注释注入器?

时间:2013-05-07 07:33:09

标签: java osgi cq5 apache-felix aem

我目前正在使用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,你会对如何解决这个问题提出任何建议吗?

1 个答案:

答案 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级别调试服务模块。