2013-05-17 18 views
1

我有我在哪裏使用maven戰爭的插件建立一個戰爭並覆蓋它使用在Adding OSGi metadata to existing projects without changing the packaging type.描述BND插件這個項目定義了以下依賴性的問題:bnd如何確定應用於導入包的版本範圍?

<dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.12</version> 
    </dependency> 

當我運行構建,它會生成以下在MANIFEST.MF

Import-Package: .., javax.ws.rs.core, .. 

入門只要我的版本更改爲1.13或更高的進口Package項變爲:

Import-Package: .., javax.ws.rs;version="[1.1,2)", .. 

對我來說,這成爲一個真正的問題,因爲我的目標中有javax.ws.rs.javax.ws.rs-api_2.0.0.m16。這將解決無版本需要的情況下的導入,但是當範圍限制存在時停止導入。

所以,我的一般問題是:bnd如何決定版本範圍?這兩個小版本之間有所不同,使它從無版本限制到特定範圍,因此我認爲理解bnd如何做出這一決定有助於我發現這個特定問題。

回答

7

Bnd使用OSGi語義版本 - 請閱讀whitepaper(PDF鏈接)。

首先,bnd計算出在構建時使用了哪個版本的軟件包。您在構建路徑中使用的JSR311 API Jar必須包含版本爲Export-Package的語句,這很好,並且該版本必須是1.1。因此,該軟件包可以使用的最低版本是1.1。

語義版本控制表示主要(即第一個)段被增加以指示所有用戶的中斷更改。因此,您的軟件包將不兼容javax.ws.rs軟件包的版本2. *。所以bnd產生的範圍可以達到但不包括2 ......即[1.1,2)

我不明白爲什麼這會導致您的問題。您聲明您想要將名爲javax.ws.rs.javax.ws.rs-api_2.0.0.m16的軟件包部署到您的目標中,但它看起來像一個文件名。您是否已檢查包內的包javax.ws.rs是否爲版本2?如果它仍然是版本1 *,那麼你可以使用它...如果它是版本2 *。那麼它意味着包含有重大更改,所以你不應該使用它。最後,如果軟件包的版本是2. *但它並不是一個真正的突破性改變,那麼創建該軟件包的人已經搞砸了,他們需要回去閱讀我鏈接到的PDF。