簡體   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