我有一个使用ANT和经典BND工具构建的OSGi包。我的bundle在内部使用了一个库(JAR),它在我的OSGi容器(Apache Felix)中不能作为一个包使用。所以,我正在尝试将其嵌入我的包中,以便在运行时进行访问。
如何使用ANT + BND嵌入这样的库/ JAR? (注意:我不能使用MAVEN,使用它可能会更容易)
答案 0 :(得分:12)
您的bnd
描述符中需要两条指令。首先使用Include-Resource
将目标JAR包含在您的包中:
Include-Resource: foo.jar
然后你需要指定foo.jar需要在bundle类路径上。我假设bundle内容本身也需要成为bundle classpath的一部分,所以我们需要将它包含在一个点中:
Bundle-ClassPath: ., foo.jar
请注意,@ seh关于使用Private-Package
将JAR包压入捆绑包的答案也是正确的(在这种情况下,JAR需要在构建时类路径中可见)。我永远不会使用Export-Package
,因为我认为捆绑应该严格控制它们的导出量。
答案 1 :(得分:0)
有一个名为"bndwrap"的BND提供的Ant任务。它没有很好的记录。当我尝试使用它时,我必须阅读the Java code才能看到它在做什么。 (参见the bnd#doWrap()
method here。)
我记得也可以用另一种方式“嵌入”一个依赖的Jar文件:不是直接作为Jar-in-a-Jar,而是通过将所有类别放入你的包中,只需在你的声明中声明Private-Package
BND directive其他Jar提供的软件包应包含在您的软件包中。或者,您可以在Export-Package
指令中提及这些包,以便将它们包含在和中。