我正在寻找OPS4J上的PAX工具,例如:this one我认为我找到了一个很好的方法:
事实证明,我错了 - 似乎PAX的东西没有这样做。 (RTFM,对吧?:))
但是这让我感到疑惑:那里有什么能满足我的要求吗?
我想也许我可以通过创建一个简单的POM并使用maven-bundle-plugin来做到这一点,但这似乎对我所要求的内容有点麻烦。
注意:我认为嵌入和组装jar并不是真正的“OSGi方式” - 所以我不会这样做,除非我真的认为它有用。例如 - Spring。
提前致谢。
答案 0 :(得分:8)
我写了一个maven原型,它可以帮助你将jar包装成一个OSGI包。
假设您想要包含commons-collections版本3.2.1
首先获取原型并安装
git clone git://github.com/HallwayTech/maven-wrap-jar-archetype.git
cd maven-wrap-jar-archetype
maven install
然后使用原型启动项目。
mvn archetype:create \
-DarchetypeGroupId=com.hallwaytech.osgi \
-DarchetypeArtifactId=wrap-jar \
-DarchetypeVersion=1.0-SNAPSHOT \
-DgroupId=commons-collections \
-DartifactId=commons-collections \
-Dversion=3.2.1
cd commons-collections
mvn install
要部署到Felix运行的Apache Sling:
mvn install -Pdeploy
答案 1 :(得分:4)
您必须维护本地POM才能完成此操作。没有一个实用程序可以接受库/ jar并在jar中吐出适当的OSGi MANIFEST。 ServiceMix和Spring一起捆绑了很多东西,可以作为示例使用。我建议看两个这样的例子:
答案 2 :(得分:2)
我们做了类似于你所描述的事情。例如,我们有一个Apache QPid的内部版本。它来自6个罐子(客户端,核心,通用,后端等),您很少单独使用它们。我们有一个带有BND的POM,它可以收集所有的罐子,然后从它们那里制作一个uber-osgi-jar。
步骤:
答案 3 :(得分:1)
我尝试了The accepted answer和Erik's answer。 Erik的建议很简单,开箱即用。虽然,在我的情况下它似乎产生了巨大的MANIFEST,然后我回想起了p2-maven-plugin。最后一种方法在很多情况下都能很好地工作。如果您需要的工件已经是bundle,或者它的依赖项是bundle,它只是将它们放入它构建的repo中。如果没有,它将使用某些默认设置运行maven-bundle-plugin(或者您可以配置所需的设置)。很酷!
我特别喜欢它抓住传递依赖关系并且也会照顾它们。如果您不需要repo,但只是在包装的包之后,那么从target/repository/plugins
文件夹中选择它是一件简单的事情。