2015-09-02 48 views
3

短版:在同一個內容包嵌入相同的OSGI依賴的多個版本

如何配置一個AEM/CQ5內容包的Maven的POM這樣的包中嵌入不同版本的同一OSGI的捆綁?

龍版本:

我建立一個內容包AEM(CQ5)。此內容包嵌入項目所需的直接和間接osgi依賴項。

我有一個包(我們稱之爲BundleX),因爲在特定版本的Google Guava上導入未解決的包導致內容包部署後仍未激活。 Guava是我嵌入項目的osgi依賴項的一部分。問題是,不同的捆綁包依賴於不同版本的番石榴。

所以我必須:

項目內容包:

  • MyBundle:
    • 取決於番石榴:15.0(我需要這個版本的一些功能)
  • BundleX
    • 取決於番石榴:r06(r06 < 15.0。我沒有在這束控制)

當我製作的內容包,我想嵌入這兩個番石榴版本。正如我們所知,OSGi支持同時部署多個版本的軟件包。

直到現在,我AEM內容包POM的配置,我有:

<plugin> 
 
    <groupId>com.day.jcr.vault</groupId> 
 
    <artifactId>content-package-maven-plugin</artifactId> 
 
    <configuration> 
 
     <embeddeds combine.children="append"> 
 
      <embedded> 
 
       <groupId>com.google.guava</groupId> 
 
       <artifactId>guava</artifactId> 
 
       <target>${cq.slingUrlSuffix}</target> 
 
      </embedded> 
 
      ... 
 
     </embeddeds> 
 
     ... 
 
    </configuration> 
 
    ... 
 
</plugin>

被行家,當然確定的嵌入式依賴的版本是本次Maven項目獨特。

所以,綜上所述,要解決的問題,我應該:

  • 嵌入番石榴的多個版本在OSGi容器。我看到的唯一解決方案是創建另一個人造內容包pom,只是爲了上傳其他Guava依賴項。但是,我希望我的主包含有所有嵌入的osgi依賴關係,所以它還沒有達到最佳狀態。

  • 覆蓋bundle2從r06到15.0的依賴版本,所以我只需要在我的容器中使用Guava 15.0。由於我沒有對這個包的控制,所以我應該從外部覆蓋它,但我不知道是否有可能做到這一點。

在此之前,非常感謝您的幫助!該AEM罩下使用

回答

3

阿帕奇吊帶OSGi的安裝程序不支持安裝的束相同的(具有相同的含義Bundle-SymbolicName)幾個版本。因此,僅僅在內容包中添加多個版本的捆綁軟件將無濟於事,最高版本的捆綁包版本總是獲勝,而其他版本則未安裝。

您可以使用標準的OSGi的工具,如Web控制檯安裝多個版本。

解決方法是使用自己的符號名稱重新打包一個包(例如V0.15的「foo.0.15」),以便Sling安裝程序將多個版本視爲不同的捆綁包並將其全部安裝。

在這兩種情況下,這些包有正確的版本範圍在他們Export-Package聲明,以避免衝突。

相關問題