我遇到了maven-bundle-plugin生成的MANIFEST.MF問題。出於某種原因,當我在<Import-Package>
字段中列出版本號時,OSGi框架不會加載我的包。如何使用maven-bundle-plugin從Import-Package中排除版本號?
我已經試驗過並注意到如果我刪除清單中的版本號,那麼該包已正確加載。
我該如何指示maven-bundle-plugin跳過版本號?
目前,它產生:
Import-Package: com.ghc.ghTester.expressions,org.apache.ws.security.proc
essor;version="[1.5,2)",org.apache.ws.security;version="[1.5,2)",org.ap
ache.ws.security.message;version="[1.5,2)",org.apache.ws.security.compo
nents.crypto;version="[1.5,2)",org.apache.ws.security.message.token;ver
sion="[1.5,2)"
但我需要它來生成:
進口包裝:com.ghc.ghTester.expressions,org.apache.ws.security.proc ESSOR ,org.apache.ws.security,org.apache.ws.security.message,org.apache。 ws.security.components.crypto,org.apache.ws.security.message.token
我的插件配置爲:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.0.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${pom.groupId}.${pom.artifactId};singleton:=true</Bundle-SymbolicName>
<Bundle-Name>${pom.name}</Bundle-Name>
<Bundle-Version>${pom.version}</Bundle-Version>
<Bundle-ClassPath>{maven-dependencies},.</Bundle-ClassPath>
<Embed-Dependency>*;scope=compile</Embed-Dependency>
<Export-Package/> <!-- nothing for this bundle to export -->
<Import-Package>com.ghc.ghTester.expressions,org.apache.ws.*</Import-Package>
</instructions>
</configuration>
</plugin>
如果我嘗試用版本加載它,我得到以下錯誤:
org.osgi.framework.BundleException: Could not resolve module: com.rit.message-level-security [978]
Unresolved requirement: Import-Package: org.apache.ws.security; version="[1.0.0,3.0.0)"
at org.eclipse.osgi.container.Module.start(Module.java:434)
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:393)
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:412)
at com.ghc.ghTester.Activator.installTempBundle(Activator.java:157)
忽略版本不是一個好習慣。部署捆綁包時出現什麼錯誤?你不能使用你的依賴關係部署的版本? –
我意識到這不是一個好習慣,但這是一個非常有限的插件,將用於非常有限的框架。該框架完全超出了我的控制範圍,當我嘗試加載我的包時,我甚至都看不到錯誤消息。從試驗和錯誤中,我發現這是導致問題的版本號,最簡單的方法是放棄版本。 –
如果你使用的是felix,你可以在gogo shell上使用'exports'命令來找到導出的包的版本號。我不認爲有可能用這個插件省略版本。也許像'version = [0,9]''可以工作,但它確實很難看,並且打敗了osgi的依賴關係管理的目的 –