2015-04-03 94 views
0

我是新來的,現在正在學習OSGi。我正在嘗試使用OSGi MANIFEST.MF文件在其中進行maven項目。在對bundle激活器類和MANIFEST.MF文件進行編碼之後,我「mvn package」它,並將OSGi安裝在控制檯中。那麼這個問題就發生在我的包名爲mvn-package-ed的時候,而不是這個名字。OSGi - 爲什麼我的包名爲「unknown-0.0.0」並且MANIFEST.MF文件被覆蓋?

unknown-0.0.0 

然後,當我檢查MANIFEST.MF文件中的.jar裏面,裏面是這樣的:

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Built-By: 5111100191 
Created-By: Apache Maven 3.2.1 
Build-Jdk: 1.8.0_40 

,而不是當我編寫這樣的:

Bundle-ManifestVersion: 2 
Bundle-SymbolicName: com.pragprog.HelloWorld 
Bundle-Name: HelloWorld 
Bundle-Version: 1.0.0 
Bundle-Activator: com.pragprog.hello.HelloWorld 
Import-Package: org.osgi.framework 

我猜測我編碼的MANIFEST.MF在mvn打包時某種程度上沒有加載。這是我的項目目錄結構

HelloWorld 
      /src 
        /main 
          /java 
             /com.pragprog.hello.HelloWorld.java 
          /resources 
             /META-INF/MANIFEST.MF 
        /test 
          /java 
          /resources 
      /target 
        /**.jar file here**/ 
      pom.xml 

我已經搜索了這個,但無法找到任何明確的解決方案。那麼我該如何解決這個問題?

在此先感謝。

+0

我建議使用一個特定的OSGi Maven插件,例如[Apache Felix Maven Bundle插件](http://felix.apache.org/documentation/subprojects/apache-felix-maven-bundle-plugin-bnd.html) – stempler 2015-04-03 08:36:51

回答

2

「mvn package」,使用「maven-assembly-plugin」不是創建OSGi包的正確方法。相反,你應該使用「maven-bundle-plugin」。 Here there is some documentation關於如何使用它。

+0

謝謝。有用。 – 2015-04-25 04:04:31

1

另請參閱bndtools團隊中的新bnd-maven-pluginhttp://njbartlett.name/2015/03/27/announcing-bnd-maven-plugin.html

你的問題是,maven的JAR插件會忽略你的清單,除非你配置插件在你的POM是這樣的:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
     <archive> 
      <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> 
     </archive> 
    </configuration> 
</plugin> 
相關問題