繁体   English   中英

如何排除 Maven 项目中的传递依赖

[英]How to exclude a transitive dependency in Maven project

我有一个 java spring 引导应用程序 A 具有依赖项 B,它是第三方 jar。B 又具有依赖项 C。当人们需要升级 C(比如从 v1.0 到 v2.0)时,一种常见的方法是在 pom A的.xml,使用Maven排除功能从B中排除C,然后将C-v2.0声明为直接依赖,或者将C-v2.0添加到dependencyManagement部分。

这种方法并不能保证在所有情况下都能正常工作。 一个例子是 org.glassfish.metro:webservices-rt:2.4.3 有依赖 woodstox-core:5.1.0 包含高安全漏洞,需要升级到 6.4.0。

我的项目 A 具有(直接)依赖性 webservices-rt:2.4.3。 应用上述方法不会从我的项目中排除 woodstox-core:5.1.0。 注意:maven 依赖树不再显示 woodstox-core:5.1.0,但 Aqua Scan 仍然指示 webservices-rt 具有依赖 woodstox-core:5.1.0。

下面是我的 pom 的一部分

        <dependency>
            <groupId>com.fasterxml.woodstox</groupId>
            <artifactId>woodstox-core</artifactId>
            <version>6.4.0</version>
         </dependency>
         <dependency>
            <groupId>org.glassfish.metro</groupId>
            <artifactId>webservices-rt</artifactId>
            <version>2.4.3</version>
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.woodstox</groupId>
                    <artifactId>woodstox-core</artifactId>
                </exclusion>
            </exclusions>
         </dependency>

在我看来,上述方法是否有效取决于 jar B 的打包方式。 有没有人有知识可以分享?

  1. 更好的方法是在<dependencyManagement>中设置所需的版本,即
<dependencyManagement>
  <dependencies>
    <dependency>
       <groupId>com.fasterxml.woodstox</groupId>
       <artifactId>woodstox-core</artifactId>
       <version>6.4.0</version>
    </dependency>
  </dependencies)
</dependencyManagement>

那么你根本不需要排除。

  1. 如果依赖树没有显示它,它就不会被使用,除非依赖是 fat jar。所以,避免 fat jars 作为依赖(如果可能的话),并进一步检查你的 Aqua Scan 是否可能做错了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM