調試時,爲什麼我的包中的服務沒有被其他包導入,我注意到,我聲明瞭commons-io的錯誤版本(1.4而不是2.4) 。但是,在調用mvn clean然後mnv install之後,我注意到,舊版本仍然被引用!此外,還沒有聲明org.apache.httpcomponents的版本!Maven bundle插件生成錯誤或缺少版本的Manifest
我的有效POM看起來像以下:
....
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
<scope>compile</scope>
</dependency>
...
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.3.0</version>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
<configuration>
<manifestLocation>META-INF</manifestLocation>
<instructions>
<_noee>true</_noee>
<_removeheaders>Import-Service,Export-Service</_removeheaders>
</instructions>
</configuration>
</execution>
</executions>
<configuration>
<manifestLocation>META-INF</manifestLocation>
<instructions>
<_noee>true</_noee>
<_removeheaders>Import-Service,Export-Service</_removeheaders>
</instructions>
</configuration>
</plugin>
我在MANIFEST.MF看到的是:
進口包裝: .....................,org .apache.com mons.io; version =「[1.4,2)」,org.apache.http,org.apache.http.client,org.ap ache.http.client.methods,org.apache.http .entity,org.apache.http.impl.cl ient,org.osgi.service.blueprint;版本= 「[1.0.0,2.0.0)」,........
現在maven-bundle-plugin的行爲對我來說似乎是隨機的。有時候版本被放置在清單中,有時候不是,有時來自同一捆綁包的包被放置在Import-Package部分中,有時候不會。現在放置舊的包版本,就好像它被緩存在某處...
是否有任何強制maven-bundle-plugin從maven dependencies正確解析包版本的方法?我不想手動編寫版本,因爲這是我們使用Maven的...
一個可能很重要的注意事項:使用這些導入的類是在Blueprint描述符中聲明的,它是如何使用maven-bundle-插件在第一行找到包,看起來插件在Blueprint支持方面有一些問題...
哇,看起來這裏有一大堆爛攤子。實際上,作爲依賴關係的httpcomponents沒有捆綁工件,所以我編譯它們,但在特徵描述符中導入httpcomponents-osgi。似乎我還在對錯誤的東西進行調試,因爲我想檢查爲什麼我的服務不是由其他軟件包導入的,但似乎服務是導入的,只有karaf控制檯沒有顯示。 –
是的。如果可能的話,您應該使用OSGi包作爲依賴項,因爲它會創建正確的導入。當我爲OSGi項目添加依賴項時,我總是看一看依賴項的清單。它通常可以讓你免於一些驚喜。 在藍圖中,當重構藍圖xml通常不會被重構時,您還需要小心。所以我經常有這樣的效果,即我的舊包名仍然被導入,並且我花了一段時間才找到原因:-) –