在karaf中部署第三方jar文件时出错

时间:2016-03-30 05:50:04

标签: java eclipse maven jar apache-karaf

我正在尝试在apache-karaf 3.0.3中部署一个包,其中包含我嵌入的一定数量的第三方jar文件, 因为第三方jar文件是非OSGi包。其中一个jar文件包含一个不存在的java文件中的import语句 在最新版本的jar文件中。(我没有jar文件的旧版本。)

  

例如:jar文件1              - Class1                  - 导入com.java.test.io

在使用jar文件部署我的应用程序包时,我遇到了错误。

  

执行命令时出错:在bundle上执行命令时出错:           无法在bundle 391上执行命令:bundle" com.test.example.bundle_0.1.0.SNAPSHOT [391]"无法解决。                                   原因:缺少约束:Import-Package:com.java.test.io;版本=" 0.0.0"

我试图用简单的java应用程序复制场景,它按预期工作。 我的假设是karaf将扫描所有import语句并检查是否有正确的导出包(包级别权限) 存在适当的进口声明。 任何人都可以解释为什么java应用程序运行并且在karaf中它失败了吗?

pom.xml

<plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>mybundlename</Bundle-SymbolicName>
                        <Embed-Dependency>jar1,jar2,jar3,jar4</Embed-Dependency>

                    </instructions>
                </configuration>
            </plugin>
        </plugins>

1 个答案:

答案 0 :(得分:0)

重要的不是您班级中的包导入,而是捆绑包的MANIFEST中的包导入。

如果您的代码在OSGi容器之外工作,则意味着在您的特定使用方案中,运行时不需要导入的包。或者根本不需要它,应该清理干净。

您必须部署捆绑包以满足导入要求,或者在构建捆绑包时必须禁止添加com.java.test.io导入。使用maven-bundle-plugin,你可以这样做:

<instructions>
    <Embed-Dependency>...</Embed-Dependency>
    <Import-Package>
        !com.java.test.io.*,
        *
    </Import-Package>
</instructions>