Феликс не любит javax.script - PullRequest
       27

Феликс не любит javax.script

2 голосов
/ 17 ноября 2010

Я пишу OSGI-комплект, используя пакет javax.script, и у меня возникают некоторые проблемы, когда Феликс корректно загружает пакет. При попытке запустить комплект я получаю:

Не удалось запустить пакет для org.plugin.script.plugin-scripter [2]: org.osgi.framework.BundleException: неразрешенное ограничение в пакете 2: пакет; (Упаковка = javax.script)

, что, я думаю, происходит, когда мы пытаемся сослаться на пакет, который неправильно загружен в пакет. Я вполне уверен, что это связано с тем, что javax.script включен только в JDK начиная с версии 1.6 и по какой-то причине Maven строит с использованием чего-то другого. Пока что я:

а. Установите необходимый импорт в моем Maven POM для Феликса:

<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>

с. Даже не уверен, что это имеет значение, но я установил свойства платформы Феликса (в их 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"

Все еще над тобой. Что еще я пропустил?

Ответы [ 2 ]

2 голосов
/ 17 ноября 2010
<Import-Package>!*,javax.script,org.osgi.framework;version="1.3.0",javax.naming,javax.naming.spi</Import-Package>

Обычно вы хотите разрешить bnd импортировать все, что нужно пакету. Здесь вы говорите, чтобы ничего не импортировалось (т. Е. "! *"). Порядок важен здесь. Поскольку * соответствует чему-либо, ваш пакет ничего не импортирует. Попробуйте полностью удалить Import-Package (который будет импортировать все по умолчанию) и посмотрите, что произойдет.

0 голосов
/ 17 ноября 2010

Я бы проверил, что некоторый пакет экспортирует этот пакет.Я думаю, что вы можете использовать такие команды, как «заголовки» для этого в зависимости от вашей среды (Felix, Equinox и т. Д.).Если вы на самом деле экспортируете его из куда-то , то я бы попытался сузить его до конкретной версии.

Надеюсь, это поможет.

...