Я пишу 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"
Все еще над тобой. Что еще я пропустил?