如何在maven-bundle-plugin生成的Manifest中识别包版本的来源

How to identify the source of a package version in the Manifest generated by maven-bundle-plugin

我正在使用 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 的依赖项。因此,生成的清单包含 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 并且清单会正确导入 javax.annotation 版本 1.0.0,但这不应该必要的,我个人会发现排除未知的依赖性更清晰。

How can I find out which dependency exports this package?

如果您安装了 *nix 控制台和 bnd命令行工具,您可以尝试:

mvn dependency:build-classpath | grep jar | tr ':' ' ' | xargs bnd find -e 'javax.annotation'

可能有更好的方法来做到这一点,但这是一个起点