Maven 传递依赖 - Commons Collection version 3 vs 4

Maven transitive dependency - Commons Collection version 3 vs 4

我在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,但可能有人错误地使用了此库中的 class(而不是首选版本 Common Collective 4)。

如您在依赖关系树中所见 - 我无法排除 Common Collection 3,因为它已被使用(可能发生 java.lang.NoClassDefFoundError)。

问题:

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

您可以使用 dependency:analyze-only

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

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

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