我有一个普通的maven jar项目,它有依赖项,比如反射库和我想要的 把它转换成osgi,我已经做过了。
<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>
这里是它丢失的地方,我需要找出&#34; Import-Package&#34;和&#34;嵌入依赖&#34; 并且,更重要计算如何将它作为拉链或玻璃鱼部署在玻璃鱼上, 也许,ORB(或Gogo),以便它将部署所有它的依赖jar。
任何想法?
-G。
BTW:org.reflections包不是OSGi准备好的
答案 0 :(得分:0)
似乎你对OSGi和Maven Bundle插件的工作原理感到困惑。 也许阅读Felix指南可以帮助您:
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>
默认情况下(即如果你只是省略它,通常就是这种情况),你的Import-Package指令将是*
,这意味着你在代码中引用的任何不在java中的东西。*或者在你自己的包中导入。但是,由于您要依赖于要嵌入的非捆绑jar,您需要通过使用表达式!org.reflections*,*
告诉插件,这意味着您不想导入org.reflections包但是一切别的很好。您还需要声明任何名为org.reflections
的artifactId都应该使用Embed-Dependency指令嵌入jar中。
打包软件包(mvn软件包或只安装mvn)后,请务必检查生成的MANIFEST以确保所有内容都正确(重要的是,请检查Import-Package软件包,看看您的环境是否包含所有软件包提供这样的包裹。)
正确设置捆绑包后,部署捆绑包非常简单。只需将其放入框架的bundle目录中,确保所需的所有其他bundle也在那里,一切都应该正常工作。
作为旁注,您可能需要考虑使用PAX-WRAP或仅使用Karaf将所需的非捆绑JAR包装为捆绑(只需在部署文件夹中抛出JAR,您就会将其包装为例如,OSGi包。)。