2

我正在使用 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。我还错过了什么?

4

2 回答 2

2
<Import-Package>!*,javax.script,org.osgi.framework;version="1.3.0",javax.naming,javax.naming.spi</Import-Package>

通常你想让 bnd 导入一个包需要的所有东西。在这里,您告诉它不要导入任何内容(即“!*”)。顺序在这里很重要。因为 * 匹配任何东西,你的包不会导入任何东西。尝试完全删除 Import-Package(这将默认导入所有内容),看看会发生什么。

于 2010-11-17T09:35:53.587 回答
0

我会检查以确保某些包正在导出该包。我认为您可以根据您的环境(Felix、Equinox 等)为此使用“标题”等命令。如果您实际上是从某个地方导出它,那么我会尝试将其缩小到特定版本。

希望这可以帮助。

于 2010-11-16T23:28:33.170 回答