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

sirbozc5  于 2022-12-03  发布在  Maven
关注(0)|答案(1)|浏览(243)

我有一个java spring Boot 应用程序A,它有依赖项B,B是第三方jar。B又有依赖项C。当人们需要升级C(比如从v1.0升级到v2.0)时,一种常见的方法是在A的pom.xml中,使用Maven排除功能将C从B中排除,然后将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>

在我看来,上述方法是否有效取决于B罐是如何 Package 的。有人有知识分享吗?

oyjwcjzk

oyjwcjzk1#

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 jar作为依赖关系(如果可能的话),并进一步检查你的Aqua Scan是否做错了。

相关问题