2013-02-26 68 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立即),例如。