2015-06-09 46 views
0

我在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

回答

1

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/。 –