【问题标题】:How do you debug annotation injectors when they just appear null?当注解注入器只是显示为空时,如何调试它们?
【发布时间】:2013-05-07 07:33:08
【问题描述】:

我目前正在使用 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 一开始就为空,你对如何解决这个问题有什么建议吗?

【问题讨论】:

    标签: java osgi aem apache-felix


    【解决方案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 级别调试服务模块。

    【讨论】:

    • 嗨,伯特兰。非常感谢您的回复。请参阅上面对我们问题的更新描述。如果您能抽出时间帮助我们,我们将不胜感激。
    • 如果它在更改嵌入依赖和/或工件范围声明后工作,这可能意味着所需的服务由于不可用的导入包而没有启动,或者客户端包没有看到 API出于同样的原因打包。在这些情况下,CQ 日志应显示错误。
    • 我们确实检查了日志,但我们一定是盲目的。 :) 感谢您的提示,非常感谢。
    • 不客气 - 如果您在日志中没有看到您期望的内容,请随时告知我们,以便我们修复其中的任何不完整或误导性信息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2011-11-04
    • 2022-10-20
    • 2014-02-06
    • 2019-07-23
    • 2011-07-13
    • 2023-04-03
    相关资源
    最近更新 更多