嵌入 javassist 依赖关系会破坏 OSGi 包
Embedding javassist dependency breaks OSGi bundle
我正在尝试嵌入式 Felix 方案。从嵌入式 OSGi 容器 (Apache Felix) 加载包时,出现以下错误。
org.osgi.framework.BundleException: Unable to resolve test.bundle-attempt [50](R 50.0): missing requirement [test.bundle-attempt [50](R 50.0)] osgi.wiring.package; (osgi.wiring.package=com.sun.jdi.connect) Unresolved requirements: [[test.bundle-attempt [50](R 50.0)] osgi.wiring.package; (osgi.wiring.package=com.sun.jdi.connect)]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4362)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2277)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1535)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Thread.java:745)
经过反复试验,我发现引入 javassist
会导致错误。
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
我正在尝试嵌入依赖项。
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.artifactId}</Bundle-Name>
<Bundle-Version>${project.version}</Bundle-Version>
<Bundle-Activator>com.snc.TestPluginsActivator</Bundle-Activator>
<Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
<Export-Package>com.snc</Export-Package>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>
关于我收到此错误的原因有什么建议吗?
javassist 工件依赖于 jar
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
并且上面的 jar 在 javassist 的 pom 和包 com.sun.jdi.connect
中被标记为可选您的示例属于我提到的上述 jar tools。
当尝试获取 Embed-dependencies 的传递依赖时,maven-bundle-plugin 不会在 MANIFEST.MF 中将那些传递可选依赖的包标记为可选文件,它试图在安装包时解决依赖关系。由于可选的传递依赖项未包含在包的 class 路径中,因此在启动包时抛出错误 Unresolved requirements
。
要解决此问题,您可以在捆绑包的 pom 中将这些依赖项标记为可选。
我正在尝试嵌入式 Felix 方案。从嵌入式 OSGi 容器 (Apache Felix) 加载包时,出现以下错误。
org.osgi.framework.BundleException: Unable to resolve test.bundle-attempt [50](R 50.0): missing requirement [test.bundle-attempt [50](R 50.0)] osgi.wiring.package; (osgi.wiring.package=com.sun.jdi.connect) Unresolved requirements: [[test.bundle-attempt [50](R 50.0)] osgi.wiring.package; (osgi.wiring.package=com.sun.jdi.connect)]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4362)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2277)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1535)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Thread.java:745)
经过反复试验,我发现引入 javassist
会导致错误。
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
我正在尝试嵌入依赖项。
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.artifactId}</Bundle-Name>
<Bundle-Version>${project.version}</Bundle-Version>
<Bundle-Activator>com.snc.TestPluginsActivator</Bundle-Activator>
<Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
<Export-Package>com.snc</Export-Package>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>
关于我收到此错误的原因有什么建议吗?
javassist 工件依赖于 jar
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
并且上面的 jar 在 javassist 的 pom 和包 com.sun.jdi.connect
中被标记为可选您的示例属于我提到的上述 jar tools。
当尝试获取 Embed-dependencies 的传递依赖时,maven-bundle-plugin 不会在 MANIFEST.MF 中将那些传递可选依赖的包标记为可选文件,它试图在安装包时解决依赖关系。由于可选的传递依赖项未包含在包的 class 路径中,因此在启动包时抛出错误 Unresolved requirements
。
要解决此问题,您可以在捆绑包的 pom 中将这些依赖项标记为可选。