我正在尝试在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>
答案 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>