【问题标题】:Maven transitive dependency - Commons Collection version 3 vs 4Maven 传递依赖 - Commons Collection 版本 3 与 4
【发布时间】:2020-05-16 09:44:27
【问题描述】:

我在pom.xml有这样的配置:

    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.4</version>
    </dependency>

但不幸的是,mvn dependency:tree 告诉我commons-beanutils 具有依赖关系:commons-collections 3.x:

[INFO] +- commons-beanutils:commons-beanutils:jar:1.9.4:compile
[INFO] |  \- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] +- org.apache.commons:commons-collections4:jar:4.4:compile

我不想在我的代码中使用Common Collection 3,但可能有人错误地使用了这个库中的一个类(而不是Common Collective 4,这是首选版本)。

正如您在依赖关系树中看到的那样 - 我不能排除 Common Collection 3,因为它已被使用(可能出现在 java.lang.NoClassDefFoundError)。

问题:

如何保护我的代码库免受 Commons Collection 3 API 的污染?

【问题讨论】:

    标签: java maven apache-commons-collection


    【解决方案1】:

    您可以使用dependency:analyze-only

    https://maven.apache.org/plugins/maven-dependency-plugin/analyze-only-mojo.html

    检查您是否使用未声明的依赖项,即您使用传递依赖项而没有显式声明它。

    如果您不希望在您的构建中使用它,只是偶尔检查一下,您可以在命令行中使用dependency:analyze

    【讨论】:

    • 但是你知道如何不仅检测而且保护吗?
    • 你这是什么意思?您可以使构建失败,这还不够吗?
    • 好的。构建失败就足够了。
    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 2019-08-23
    • 1970-01-01
    • 2020-10-17
    • 2015-04-03
    • 2020-06-24
    • 2016-09-18
    相关资源
    最近更新 更多