2012-03-29 49 views
13

我已經在我的maven項目中聲明瞭一個OSGi bundle作爲依賴項。 (它恰好是felix容器。)爲什麼不能找到一個osgi包的依賴?

<dependency> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>org.apache.felix.framework</artifactId> 
    <version>4.0.2</version> 
    <type>bundle</type> 
    <scope>compile</scope> 
</dependency> 

當我嘗試構建時,它說它找不到它。

[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Failed to resolve artifact. 

Missing: 
---------- 
1) org.apache.felix:org.apache.felix.framework:bundle:4.0.2 

    Try downloading the file manually from the project website. 

但是,快速查看中央驗證此神器確實存在。我注意到,如果我將它更改爲「jar」類型,它確實會爲我下載jar()。這讓我想到了,爲什麼我首先把它稱爲捆綁包?那麼,我這樣做是因爲當我使用m2e來查找神器時,它將它稱爲「捆綁」。實際上,m2e生成了我在上面引用的那些座標。

捆綁不是有效的Maven工件類型嗎?如果沒有,爲什麼m2e稱之爲?

+0

檢查這個問題http://stackoverflow.com/questions/5389691/what-is-the-meaning-of-type-bundle-in- a-maven-dependency – jordeu 2012-03-29 20:27:58

+0

謝謝,但是這篇文章只是說「捆綁」是一個osgi捆綁。我知道。我關心的是爲什麼maven似乎無法解決這個神器。 – chad 2012-03-29 20:31:20

回答

24

這不是在接受的答案中提到的m2e中的小故障。問題是maven不知道類型「bundle」是什麼。所以你需要添加一個定義它的插件,即maven-bundle-plugin。請注意,您還需要將擴展屬性設置爲true。因此,POM應該有類似

<plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>2.4.0</version> 
     <extensions>true</extensions> 
</plugin> 

與接受答案的問題是,它的工作原理,如果捆綁型的依賴是直接依賴;因爲它是你的pom聲明它,你可以刪除這個類型。然而,如果你的依賴項本身依賴於類型捆綁包,那麼你就被搞砸了,因爲你的一個傳遞依賴關係是捆綁類型的,你不能只刪除它的類型,因爲你不是那個工件的所有者,無法訪問pom,這也是你當前的執行不瞭解的。它會嘗試尋找repo/your-dependency.bundle

我遇到了這個問題,當使用依賴插件來複制依賴。在這種情況下,插件依賴關係必須放入插件本身。你只需要依賴插件來了解捆綁插件:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>2.4.0</version> 
      <type>maven-plugin</type> 

     </dependency> 
    </dependencies> 
    <extensions>true</extensions> 
</plugin> 
+4

這真的應該是被接受的答案。 – JBT 2014-11-16 20:38:38

相關問題