Я пишу пакет OSGI, используя пакет javax.script, и у меня возникают проблемы с тем, чтобы Феликс правильно загружал пакет. При попытке запустить пакет я получаю:
Не удалось запустить пакет для org.plugin.script.plugin-scripter [2]: org.osgi.framework.BundleException: неразрешенное ограничение в пакете 2: пакет; (пакет=javax.script)
что, я думаю, происходит, когда мы пытаемся сослаться на пакет, который неправильно загружен в бандл. Я почти уверен, что это связано с тем, что javax.script входит только в JDK, начиная с версии 1.6, и по какой-то причине 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>
в. Даже не уверен, имеет ли это значение, но я установил для свойств фреймворка 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"
Все еще надда. Что еще я пропустил?