2013-05-07 51 views
1

我目前正在使用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被空,開始時,你會如何進攻僅給定一空的參考這個問題有什麼建議?

回答

1

@Reference並非特定於CQ,而是由Apache Felix maven-scr-plugin處理以生成OSGi Declarative Services(DS)的元數據。

你不是說你的情況下「注射失敗」。

如果您的問題發生在構建時,可能是由於maven-scr插件的配置錯誤,在這種情況下,DS元數據將無法正確生成。該元數據是在target/scr-plugin-generated/OSGI-INF下生成的,您可以根據DS規範檢查那些文件,檢查它們是否正確。在那裏生成的XML元數據文件的語法非常簡單,並且在DS規範中有記錄。另請注意,在構建時輸出調試信息的mvn -X可能有助於排除此類問題。

另一方面,如果構建和DS元數據正常,但構建時引用不滿足,則可以通過OSGi控制檯(Sling和CQ5中的/ system/console下)檢查是否需要OSGi服務是否存在,如果不檢查系統日誌以查找可能的原因或在Java級別調試服務模塊。

+0

嗨貝特朗。非常感謝回覆。請參閱上述問題的更新說明。如果你能找到時間來幫助我們,那將不勝感激。 – 2013-05-28 00:40:47

+0

如果它在更改Embed-Dependency和/或工件範圍語句後工作,則可能意味着由於導入的軟件包不可用而導致所需的服務未啓動,或者出於同樣的原因,客戶端軟件包未看到API軟件包。 CQ日誌應該在這些情況下顯示錯誤。 – 2013-05-28 11:48:13

+0

我們確實檢查了日誌,但我們一定是失明的。 :) 感謝您的提示,非常感謝。 – 2013-05-30 05:51:15