【发布时间】:2017-04-27 05:46:56
【问题描述】:
我正在使用 maven-bundle-plugin 从一个 Maven 模块创建一个 OSGI 包。
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Import-Package>
*
</Import-Package>
<Export-Package>
my.bundle.packages
</Export-Package>
</instructions>
</configuration>
</plugin>
不幸的是,似乎有一个依赖项暴露了 javax.annotation。因此,生成的 Manifest 包含Import-Package: javax.annotation;version="[3.2,4)"
我怎样才能知道哪个依赖导出了这个包?通过使用mvn dependency:list,我已经能够排除一些依赖项(com.google.code.findbugs:annotations 和 com.google.code.findbugs:jsr305),但版本范围仍然存在。
我一直在查看直接依赖项的清单文件,但没有找到任何其他导出 javax.annotation 的 jar。
注意:我可以向 javax.annotation:com.springsource.javax.annotation 添加一个依赖项,并且 Manifest 会正确导入 javax.annotation 1.0.0 版,但这不是必需的,我个人会觉得它更干净排除未知的依赖关系。
【问题讨论】:
-
哪个依赖jar包含包javax.annotations?
-
它们都没有,但可能存在嵌套的依赖关系。这个包是 jdk 的一部分,并且在运行时部署了 springsource-bundle
-
如果你使用 spring 3.x,导入的 3.x 范围可能指向 spring。你能发布你的 pom 内容吗?
-
我不使用 spring 3.x。 pom 只包含一个依赖列表和上面的插件
-
如果没有指定包版本,可能是bundle版本造成的。您可以使用
javax.annotation;version=0,* 覆盖版本
标签: java maven osgi maven-bundle-plugin