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
。
我在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
。