我正在使用javax.script包编写一个OSGI bundle,在让Felix正确加载该包时遇到了一些问题。在尝试启动捆绑包时,我得到了:
为org.plugin.script.plugin启动包失败-脚本2: org.osgi.framework.BundleException:包2中的未解析约束: package;(package=javax.script)
我认为当我们试图引用一个没有正确加载到包中的包时,就会发生这种情况。我相当确定这是因为javax.script是从1.6版本开始才捆绑到JDK中的,而出于某种原因,它是使用其他东西构建的。到目前为止,我已经:
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。我还错过了什么?
发布于 2010-11-17 17:35:54
<Import-Package>!*,javax.script,org.osgi.framework;version="1.3.0",javax.naming,javax.naming.spi</Import-Package>通常,您希望让bnd导入捆绑包所需的所有内容。在这里,您告诉它不要导入任何内容(即"!*")。在这里,顺序很重要。由于*匹配任何内容,因此您的包不会导入任何内容。尝试完全删除Import-Package (这将默认导入所有内容),看看会发生什么。
发布于 2010-11-17 07:28:33
我会检查以确保某个包正在导出该包。我认为你可以根据你的环境(Felix,Equinox等)使用像"headers“这样的命令。如果您实际上是从某个地方导出它,那么我会尝试将其缩小到一个特定的版本。
希望这能有所帮助。
https://stackoverflow.com/questions/4199847
复制相似问题