2012-06-03 18 views
2

我正在嘗試使用Karaf,我想知道是否可以將其配置爲從Apache Maven Central存儲庫中提取傳遞依賴關係。無需使用「嵌入式捆綁」Karaf支持從maven中心下載傳遞依賴嗎?

我已經知道你可以拉顯式依賴關係,問題的關鍵部分是「傳遞」的。

我也知道你可以使用OBR從部署站點的repository.xml文件中讀取數據,但是我找不到一個用於Maven中心的文件。問題的一個可能的答案是添加URL,但是我無法在repository.xml URL的任何位置找到它。

此刻,我的解決辦法是要弄清楚的依賴關係是什麼,明確地將它們添加到

嵌入式束不與Karaf OSGi的藍圖實施工作(它只是等待的東西,將不存在)。我也覺得必須這樣做很醜陋。對於這個問題,我可以想到的另一個可能的答案是,是否有指示創建一個可以部署到包含所有必需依賴項的任何 OSGi容器(不只是使用KAR文件的卡拉夫)的包。

回答

2

我發現了一種使用Maven以相對OSGi標準方式執行此操作的方法。它使用maven-dependency-plugin來創建只包含運行時作用域所需的依賴關係的存儲庫。

然後執行maven-bundle-plugin:index目標來創建repository.xml文件。

在這個目標中你有一個有效的obr倉庫,maven-assembly-plugin可以用來根據需要打包它。

以下pom.xml代碼段將執行所需的操作。

 <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>copy-runtime-dependencies</id> 
        <phase>package</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <copyPom>true</copyPom> 
         <useRepositoryLayout>true</useRepositoryLayout> 
         <includeScope>runtime</includeScope> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>index</id> 
        <goals> 
         <goal>index</goal> 
        </goals> 
        <phase>verify</phase> 
        <configuration> 
         <mavenRepository>${project.build.directory}/dependency</mavenRepository> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

至於Karaf,這與它的傳遞依賴沿束可以在不使用Karaf的feature.xml的使用以下命令進行安裝:

features:install obr 
obr:addUrl [location of the OBR repository, can be file:///....] 
obr:deploy [symbolicname-of-bundle] 
start [symbolicname-of-bundle] 

瞧。

請注意,這隻會加載您指定的包所引用的包,因此如果您使用的是類似Blueprint的東西,理論上它不應該知道其他包,那麼您必須顯式部署他們或創建一個超級捆綁包,將包含你有捆綁(如功能/產品)

1

據我所知,最好的辦法是使用Maven下載所有依賴項,然後使用Felix bnd plugin將本地(或遠程)存儲庫轉換爲可與Karaf一起使用的OBR。

+0

任何如何做這種轉換的例子? –

+0

@ArchimedesTrajano我提供的鏈接進入一些例子。這基本上是一個問題,或者設置一些額外的細節(再次,請參閱鏈接)的POM文件,然後運行'mvn clean install'或'mvn clean deploy' – Oleksi

+0

我之前看過鏈接,這些例子只顯示瞭如何要爲有問題的pom安裝bundle,它不會告訴你如何包含傳遞依賴。 –

3

您可以使用karaf-maven插件從maven依賴關係創建功能文件。這將解決傳遞依賴。

+0

我再次要求一個例子,當我昨天這樣做時,我只是得到NullPointerExceptions。此外,我的問題文本明確指出,我正在尋找能夠在任何OSGi容器中工作的東西,而不僅僅是卡拉夫 –

+0

您可以將您的示例項目發佈到某處嗎?然後我可以看看它,並檢查爲什麼你會得到Nullpointer異常。這可能意味着某處存在錯誤。據我所知,這個問題沒有容器獨立的答案。請檢查您使用的是最新版本的Karaf。例如,您可以查看程序集/功能中的karaf源代碼。它使用karaf maven插件來創建自己的功能。 –

+0

https://github.com/trajano/maven-jee6/tree/emerging-technologies/hello-osgi –