Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在karaf中部署第三方jar文件时出错_Java_Eclipse_Maven_Jar_Apache Karaf - Fatal编程技术网

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

Java 在karaf中部署第三方jar文件时出错,java,eclipse,maven,jar,apache-karaf,Java,Eclipse,Maven,Jar,Apache Karaf,我试图在ApacheKaraf3.0.3中部署一个包,其中包含一定数量的第三方jar文件,我将其嵌入其中, 因为第三方jar文件是非OSGi包。其中一个jar文件包含一个不存在的java文件中的导入语句 在最新版本的jar文件中(我没有旧版本的jar文件) e、 g:jar文件1 -第一类 -导入com.java.test.io 在部署带有jar文件的应用程序包时,我遇到了一个错误 执行命令时出错:在捆绑包上执行命令时出错: 无法对捆绑包391执行命令:无法解析捆绑包“com.test.exam

我试图在ApacheKaraf3.0.3中部署一个包,其中包含一定数量的第三方jar文件,我将其嵌入其中, 因为第三方jar文件是非OSGi包。其中一个jar文件包含一个不存在的java文件中的导入语句 在最新版本的jar文件中(我没有旧版本的jar文件)

e、 g:jar文件1 -第一类 -导入com.java.test.io

在部署带有jar文件的应用程序包时,我遇到了一个错误

执行命令时出错:在捆绑包上执行命令时出错: 无法对捆绑包391执行命令:无法解析捆绑包“com.test.example.bundle_0.1.0.SNAPSHOT[391]”。 原因:缺少约束:导入包:com.java.test.io;version=“0.0.0”

我正在尝试用简单的java应用程序复制这个场景,它按预期工作。 我的假设是karaf将扫描所有导入语句,并检查是否有正确的导出包(包级权限) 存在相应的导入状态。 有人能解释一下为什么java应用程序会运行,而且会失败吗

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>

org.apache.felix
maven捆绑插件
真的
mybundlename
罐1,罐2,罐3,罐4

重要的不是类中的包导入,而是捆绑包清单中的包导入

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

您必须部署一个bundle来满足导入,或者在构建bundle时必须禁止添加导入
com.java.test.io
。使用maven bundle插件,您可以这样实现:

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

...
!com.java.test.io.*,
*

您如何使用嵌入的jar文件构建包?@谢谢Ralf。com.java.test.io包驻留在第三方jar文件中。是否可以从嵌入的依赖项jar文件中排除该包。另外,对于非osgi jar文件,没有任何限制(通过在karaf中部署jar进行测试),因此它希望捆绑包处于place@Shriram,是的,例如,如果您使用mave bundle插件,您可以轻松地排除添加到清单导入部分的包。您如何使用嵌入的第三方JAR构建捆绑包?