我正在使用 javax.script 包编写一个 OSGI 包,并且在让 Felix 正确加载包时遇到了一些问题。尝试启动捆绑包时,我得到:
org.plugin.script.plugin-scripter [2] 的包启动失败:org.osgi.framework.BundleException:包 2 中未解决的约束:包;(包=javax.script)
我认为当我们尝试引用未正确加载到包中的包时会发生这种情况。我相当肯定这是因为 javax.script 仅从 1.6 开始捆绑到 JDK 中,并且出于某种原因,Maven 正在使用其他东西进行构建。到目前为止,我已经:
一个。通过以下方式在我的 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>
湾。将 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。我还错过了什么?