2017-03-07 45 views
1

我有一個OSGI包,它依賴於第三方庫,我不想在容器中部署該庫,我寧願將它嵌入到我的包中。在OSGI中嵌入傳遞依賴關係

當然,該庫有它自己的依賴關係,我也想嵌入它們。

我使用的Maven Bundle Plugin

<plugin> 
<groupId>org.apache.felix</groupId> 
<artifactId>maven-bundle-plugin</artifactId> 
    <configuration> 
    <instructions> 
     <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
     <Bundle-Description>${project.description}</Bundle-Description> 
     <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor> 
     <Meta-Persistence>...</Meta-Persistence> 
     <Export-Package>...</Export-Package> 
     <Import-Package>...</Import-Package> 
     <Embed-Dependency>3rd-Party</Embed-Dependency>      
     <Embed-Transitive>true</Embed-Transitive> 
     </instructions> 
    </configuration> 
</plugin> 

結果,3rd-Party嵌入所產生的捆綁,而不是它的傳遞依賴,彷彿<Embed-Transitive>true</Embed-Transitive>沒有任何效果。

所以我有一些問題

  • 這是一個過渡的方式嵌入第三方庫的正確方法是什麼?
  • 這是否照顧生成的Manifest文件(不導入屬於第三方庫及其依賴項的包)?

謝謝

回答

1

關於嵌入-相關性:如果你看看在felix docs他們總是用一個範圍,如:;scope=compile|runtime

也許相關捆綁包的名稱也必須符合給定的正則表達式。如果你想嵌入大部分的罐子,只能省略一些,也許你可以嵌入*,然後用!排除一些。

關於清單:maven bundle插件應該負責調整導入到您的嵌入式軟件包。因此,不應該爲嵌入的包導入。

+0

Hello Christian,所以你認爲指定第三方庫的確切名稱存在問題? – isco

+0

至於嵌入的軟件包的導入,當我嵌入依賴關係時,導入的軟件包列表增長非常快,我認爲這個插件沒有處理這個問題 – isco

+0

許多庫的一個大問題是它們使用了很多可選依賴。如果你只是簡單地嵌入這樣一個庫,那麼你也可以得到可選的代碼。這樣的樹可以長得很快。如果這是你的情況,你知道你不需要一些可選的代價,那麼你可以嘗試在maven中排除它們。 –