嵌入Javassist依赖关系会破坏OSGi捆绑包

时间:2019-08-23 21:12:11

标签: java osgi osgi-bundle maven-bundle-plugin embedded-osgi

我正在尝试嵌入式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>

关于出现此错误的原因有何建议?

1 个答案:

答案 0 :(得分:2)

javassist 工件依赖于jar

<groupId>com.sun</groupId>
<artifactId>tools</artifactId>

,并且在 javassist pom 中将上述jar标记为可选,并且在示例中未解析的软件包com.sun.jdi.connect属于上述jar,我提到的工具

当尝试获取Embed依赖项的传递依赖项时,maven-bundle-plugin不会在 MANIFEST.MF 文件中将这些传递性可选依赖项的程序包标记为可选,并且正在尝试解决安装捆绑软件时的依赖性。由于可选的传递依赖项未包含在捆绑软件的类路径中,因此在启动捆绑软件时抛出了错误Unresolved requirements

要解决此问题,您可以在捆绑包的 pom 中将这些依赖项标记为可选。