Eclipse OSGI 未满足约束
Eclipse OSGI unsatisfied constraint
我在 Eclipse 中有一个基本的 OSGI 项目。当我创建一个 class 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("problems view")提示这个错误信息:
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>
maven bundle 插件查看您依赖的包的清单以确定包版本。
它发现您使用包 org.osgi.framework 并且 felix framework 5.0.0 导出此包的版本为 1.8.0。所以它创建了一个从这个版本开始的导入范围,直到排除下一个主要版本。
所以你的清单看起来不错。你不能从 eclipse 运行 的原因可能是你在那里使用了一个较低的 OSGi 框架版本,它不提供上述包的 1.8.0 版本。尝试 运行 使用 felix 框架 5.0.0.
我在 Eclipse 中有一个基本的 OSGI 项目。当我创建一个 class 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("problems view")提示这个错误信息:
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>
maven bundle 插件查看您依赖的包的清单以确定包版本。
它发现您使用包 org.osgi.framework 并且 felix framework 5.0.0 导出此包的版本为 1.8.0。所以它创建了一个从这个版本开始的导入范围,直到排除下一个主要版本。
所以你的清单看起来不错。你不能从 eclipse 运行 的原因可能是你在那里使用了一个较低的 OSGi 框架版本,它不提供上述包的 1.8.0 版本。尝试 运行 使用 felix 框架 5.0.0.