我在Eclipse中有一个基本的OSGI项目。当我创建一个类Activator并导入BundleActivator时,Eclipse更改了MANIFEST.MF添加这些行:
Export-Package: my.package.name;uses:="org.osgi.framework";version="0.0.1.SNAPSHOT"
Import-Package: org.osgi.framework;version="[1.8,2)"
现在Eclipse("问题视图")会提示此错误消息:
Unsatisfied constraint: 'Import-Package: org.osgi.framework; version="[1.8.0,2.0.0)"' Plug-in Problem MANIFEST.MF
我已经导入了最新的Apache Felix运行时,它可以作为Maven依赖项找到,但是当从Eclipse中运行时,这并没有解决问题。
我需要更改什么来解决依赖关系?为什么打印版本为1.8.0,2.0.0?
更新
pom.xml的插件部分:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<configuration>
<manifestLocation>src/main/resources/META-INF</manifestLocation>
<rebuildBundle>true</rebuildBundle>
<instructions>
<Bundle-Activator>my.package.name.Activator</Bundle-Activator>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-RequiredExecutionEnvironment>JavaSE-1.7</Bundle-RequiredExecutionEnvironment>
</instructions>
</configuration>
<!-- EXECUTION -->
<extensions>true</extensions>
<executions>
<execution>
<id>set_failok</id>
<goals>
<goal>manifest</goal>
</goals>
<configuration>
<instructions>
<_failok>true</_failok>
</instructions>
</configuration>
</execution>
</executions>
</plugin>
pom.xml的依赖部分(导入效果很好):
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.framework</artifactId>
<version>5.0.0</version>
</dependency>
答案 0 :(得分:1)
maven bundle插件查看您所依赖的bundle的清单,以确定包版本。
它发现您使用包org.osgi.framework,并且felix框架5.0.0将此包导出为1.8.0版。因此,它会从此版本创建导入范围,直到排除下一个主要版本。
所以你的Manifest看起来不错。您无法从eclipse运行的原因可能是您使用较低的OSGi框架版本,但不提供上述软件包的1.8.0版本。尝试使用felix framework 5.0.0运行。