2013-02-26 70 views
0

我有一個常規的maven jar項目,它有依賴關係,比如反射庫,我想 將它轉換爲osgi,我已經完成了。Glassfish OSGI與依賴關係,如何?

  1. 在不同的(maven)jar項目中創建了一個通用接口層,並將其作爲依賴項添加到該包中。
  2. 將osgi-module-to-be的類型改爲「bundle」。
  3. 創建BundleActivator的的實現
  4. 添加了這個插件的POM:

<groupId>org.apache.felix</groupId> 
<artifactId>maven-bundle-plugin</artifactId> 
<version>2.3.7</version> 
<extensions>true</extensions> 
<configuration> 
    <instructions> 
     <Bundle-Activator>my.package.MyServiceActivator</Bundle-Activator> 
     <Export-Package> 
      my.package.exp.* 
     </Export-Package> 
     <Import-Package> 
      !org.reflections,??? 
     </Import-Package> 
     <Embed-Dependency> 
      slf4j-api;scope=compile,??? 
     </Embed-Dependency> 
    </instructions> 
</configuration> 

這裏是它得到失去,我需要弄清楚的「導入 - Package「和」Embed-Dependency「 和甚至更​​重要 figure如何將它部署在glassfish上一個zip,或者ORB(或者Gogo),這樣它就可以部署它的所有依賴關係的罐子。

有什麼想法?

G.

BTW:在org.reflections包不OSGi的準備

回答

0

看來你感到困惑如何OSGi和Maven的捆綁插件的工作。 也許讀費利克斯指南將幫助您:

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

基本上,你應該有這樣的事情:

<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-bundle-plugin</artifactId> 
    <extensions>true</extensions> 
    <configuration> 
    <instructions> 
     <Bundle-Activator>my.package.MyServiceActivator</Bundle-Activator> 
     <Export-Package> 
     my.package.exp.* 
     </Export-Package> 
     <Import-Package> 
     !org.reflections*,* 
     </Import-Package> 
     <Embed-Dependency> 
     org.reflections 
     </Embed-Dependency> 
    </instructions> 
    </configuration> 
</plugin> 

默認情況下(即如果你只是忽略它,這通常是case),你的Import-Package指令將是*,這意味着你在代碼中引用的任何內容都不在java中,或者在你自己的bundle中應該被導入。但是由於您對要嵌入的非捆綁jar有依賴性,因此您需要通過使用表達式!org.reflections*,*來告訴插件,這意味着您不需要導入org.reflections包,但其他所有內容都可以。您還需要聲明使用Embed-Dependency指令將任何名爲org.reflections的工件嵌入到jar中。

順便說一句,你很可能不希望嵌入你的日誌框架SLF4J實現,更不用說API了,因爲任何OSGi環境都應該爲你提供一個日誌實現。

打包你的包(mvn包或者只是mvn安裝)後,一定要檢查生成的MANIFEST以確保它看起來像一切都是正確的(重要的是,檢查Import-Package軟件包並查看你的環境是否全部提供這種包的捆綁包)。

一旦你正確地設置你的包,部署它是微不足道的。把它放到你的框架的bundle目錄中,確保你需要的所有其他bundle都在那裏,並且一切都應該正常工作。

作爲便箋,您可能需要考慮使用PAX-WRAP或者僅僅是Karaf(只需在部署文件夾中引入JAR,然後將其打包爲OSGi包)打包您需要的非捆綁JAR立即),例如。