Eclipse OSGI不满意约束

问题描述:

我在Eclipse中有一个基本的OSGI项目。当我创建了一个类活化剂和导入的BundleActivator的是,Eclipse改变了MANIFEST.MF添加这些行:Eclipse OSGI不满意约束

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

你能告诉我们你的'pom.xml'吗?你怎么试图使用OSGi? '[1.8.0,2.0.0]'表示“任何版本从1.8.0(含)到2.0.0(独占)。这就是OSGi版本控制的工作原理。 –

+0

奇怪,我没有eclipse改变清单.mf当添加激活器时... – flafoux

+0

我用右键单击“配置” - >“转换为OSGI Bundle”,之后设置项目构面“Osgi Bundle”并自动更改清单文件 – Stefan

Maven的捆绑插件看起来成您依赖于确定软件包版本的软件包的清单。

它发现您使用软件包org.osgi.framework,并且felix framework 5.0.0将该软件包与1.8.0版导出。所以它会创建一个从此版本的导入范围,直到排除下一个主要版本。

所以你的Manifest看起来不错。你无法从eclipse运行的原因可能是你在那里使用了一个较低的OSGi框架版本,它没有提供上述软件包的1.8.0版本。尝试使用felix框架5.0.0运行。

+0

的确,在将Felix降级到4.0.0之后,导入变为(1.6,2)和它可以工作,非常感谢! – Stefan

+0

更好的是,不要针对特定​​的OSGi Framework实现(如Felix)进行编译,而是使用OSGi规范JARS之一('osgi.core- .jar'),该规范可以从OSGi Allian ce网站http://www.osgi.org/。 –