[英]maven-bundle-plugin embed dependency failed to deploy bundle into OSGi container
我有一個Maven專案探照燈。 在日食方面運行良好。 然后,我使用bundle-plugin生成bundle,並使用<embed-dependenciy>
將所有依賴項嵌入到單個目標bundle中。 這是pom.xml:
<groupId>net.floodlightcontroller</groupId>
<artifactId>floodlight</artifactId>
<version>master</version>
<packaging>bundle</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
<Bundle-Activator>net.floodlightcontroller.core.Activator</Bundle-Activator>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
</instructions>
</configuration>
</plugin>
</plugins>
<build>
我已經檢查了目標結構。 包括所有依賴項。 然后我檢查manifest.mf:
Import-Package:
COM.jrockit.reflect,COM.newmonics.PercClassLoader,com.google.protobuf,com.informix.jdbc,
com.kenai.jnr.x86asm,groovy.lang,javax.annotation,javax.jms,javax.mail,
javax.mail.internet,javax.management,javax.naming,javax.net,javax.net.ssl,javax.script,
*
*
*
我想知道為什么為什么它仍然會導入這么多軟件包,因為我已經將所有依賴項都嵌入了單個軟件包中。 當我將捆綁軟件部署到OSGi容器中並啟動它時,出現錯誤消息:
Unable to start bundle 402: Unresolved constraint in bundle floodlight [402]:
Unable to resolve 402.0: missing requirement [402.0] osgi.wiring.package;
(osgi.wiring.package=COM.jrockit.reflect)
COM.jrockit.reflect是導入包中列出的第一個包。 但是未在導出包中列出。 運行時是否需要此軟件包? 誰能幫我?
令人遺憾的做法是,許多jar在其代碼中具有比在pom中聲明的更多的依賴關系。 它們通常是“橋接”環境代碼的一部分。 即,例如在用jrockit或groovy執行jar時,它可以利用它,但核心代碼實際上並不需要此依賴關系。 此外,javax包可能應該從您的應用服務器導入。 這些通常在Maven的“提供”范圍內。
通常,您可以將這些依賴項設置為可選,並祈禱沒有核心代碼路徑。 您可以使用以下命令在bnd中將其設置為可選:
<_import-package>
javax.*,
COM.jrockit.*;
COM.newmonics.*;
com.google.protobuf;
com.informix.jdbc;
com.kenai.jnr.x86asm;
groovy.lang;
resolution:=optional,
*
</_import-package>
不要忘了最后的'*',它為常規導入提供了掩碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.