Felix不喜欢javax.script
我在写一个使用javax.script包的OSGI包,并且有一些问题让Felix正确加载包。当试图启动捆绑,我发现了:Felix不喜欢javax.script
失败束开端org.plugin.script.plugin-编剧[2]:org.osgi.framework.BundleException:未解决的约束在束2:封装; (package = javax.script)
我认为当我们试图引用未正确加载到包中的包时会发生这种情况。我相当肯定这是由于javax.script仅从1.6开始捆绑到JDK中,出于某种原因,Maven正在使用其他方法构建。到目前为止,我已经:
a。在我的Maven POM中为Felix设置必要的导入:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>org.plugin.script</Export-Package>
<Private-Package>org.plugin.script.*</Private-Package>
<Bundle-Activator>org.plugin.script.ScripterPlugin</Bundle-Activator>
<Import-Package>!*,javax.script,org.osgi.framework;version="1.3.0",javax.naming,javax.naming.spi</Import-Package>
<Embed-Dependency>!org.apache.felix*;scope=compile|runtime;inline=false</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
<Embed-Directory>dependency</Embed-Directory>
<Embed-StripGroup>true</Embed-StripGroup>
<_failok>true</_failok>
</instructions>
</configuration>
</plugin>
b。将Maven编译器设置为1.6,因为这是我们得到的最早的javax.script
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
c。甚至不知道这是否有所作为,但我将Felix的框架属性(在他们的config.properties中)设置为1.6.0并包含了javax.script导出。 TBH我不确定这个问题,但我认为我会采取一些措施。
org.osgi.framework.system.packages=org.osgi.framework; version=1.3.0, \
[lots of stuff in between]
javax.script; \
version="1.6.0"
还是nadda tho。我还错过了什么?
我会检查以确保一些包正在导出该包。我认为你可以根据你的环境使用像“标题”这样的命令(Felix,Equinox等)。如果你实际上是从的某处出口,那么我会尝试缩小到一个特定的版本。
希望这会有所帮助。
<Import-Package>!*,javax.script,org.osgi.framework;version="1.3.0",javax.naming,javax.naming.spi</Import-Package>
通常你想让bnd导入一个bundle需要的所有东西。这里你告诉它不要输入任何东西(即“!*”)。订单在这里很重要。由于*匹配任何内容,因此您的包不会导入任何内容。尝试彻底删除导入包(这将默认导入所有内容)并查看会发生什么。
谢谢你的提问者。 *实际上已经完成了,所以我可以保持捆绑的大小。想象一下,对我来说,明确说明个人导入会更好,而不是让bnd抓住所有东西,并使罐子变得肥胖。在任何情况下,我仍遇到未解决的约束异常。清单(删除导入包之后)看起来很好tbh: Manifest-Version:1.0 导出包:org.plugin.script;用途:=“javax.script等等” 导入包:javax .script等等 开始减少整体感:P – Michael 2010-11-17 18:53:05
这里有一些有趣的误解。 Import-Package语句对包的大小没有任何影响,它由Private-Package和Export-Package语句控制。Bnd不会“抓住所有东西”......它抓住了你在Java代码中使用的东西,除此之外别无它物。所以通过覆盖!*实际上是说“即使我的代码使用它们,也不要导入这些包”。 – 2010-11-18 00:24:25
至于未解决的约束错误......这仅仅意味着没有其他bundle导出包需要的包。如果你在Java 6上运行,那么“系统包”应该*导出这个包,因为它是Java 6标准库的一部分。如果你运行在Java 5或更早的版本上,那么你需要一个单独的包来导出这个包。 – 2010-11-18 00:49:43
只是一个随机提示 - 它看起来像你试图加载包时发生的错误,所以你检查你的*执行*平台是Java 1.6吗? – 2010-11-16 23:32:22
@Stephen谢谢你的提示,但那是第一个怀疑。我实际上删除了1.6以外的所有版本,所以我不这么认为。 – Michael 2010-11-17 00:11:22
啊新的发展。清单告诉我,javax.script包在Export-Package(使用:)和Import-Package中,但在Ignore-Package中也是*,这很奇怪,因为我从未将它设置为这样。 – Michael 2010-11-17 01:51:44