2013-07-22 71 views
3

我在导入OSGi包中的包时遇到问题。从OSGi包中的目标导入包

名为org.semanticweb.HermiT.datatypes.xmlliteral的程序包包含在jar文件org.semanticweb.HermiT.jar中。这个jar包含在我的目标定义中,并在我的运行配置中选中。我的目标认为它是一个OSGi包,所以这不应该是问题。当我尝试在我自己的包中导入包时,出现错误,说没有包导出包。任何人知道可能是什么问题?

+0

您是否尝试将它添加到'Manifest'的'Import-Package'标头中?你在那里找到那个包吗? –

+0

是的,这就是我想要做的,但他似乎并没有在那里找到包。 – PieterDB

+0

包org.semanticweb.HermiT处于活动状态吗?你应该通过控制台检查它,如果不是的话。同时检查该捆绑软件是否导出了包含必要版本的软件包。 –

回答

3

检查“org.semanticweb.HermiT.jar”的标准下载,它没有导出包。因此,JAR中的任何软件包都不能被其他OSGI组件使用。

UPDATE:

的PAX-URL包装插件可以帮你换你的非OSGi的JAR成一个OSGi包,并添加任意的清单线。

https://ops4j1.jira.com/wiki/display/paxurl/Wrap+Protocol

也可能有它们不包括出口型包装的理由。您可能想要直接询问创建者,以确保您不会遇到麻烦。

您也可以更新您拥有的JAR,然后在部署时始终使用该JAR。实际上有一些TON选项。

你也可以看到这个项目是怎么做的:

http://iks-project.googlecode.com/svn-history/r794/sandbox/kres/trunk/eu.iksproject.kres.shared/dependency/hermit124/pom.xml

他们创造一个pom.xml和使用Maven的捆绑插件提供自己的清单条目。

+0

好的,那是我怀疑的。有没有办法改变这个?我已经尝试过改变MANIFEST.MF并添加导出的包。但它似乎很难再次使它成为一个罐子.. – PieterDB

+0

你基本上必须''包装'作为一个有效的osgi包的罐子。编辑:哎呀,打回车。我会更新我的答案。 –

+0

实际上,一个jar文件只是一个ZIP文件,所以再次制作一个jar文件很容易。你可能会使哈希不匹配,但我不是100%确定这是一个问题。 –