小编典典

排除单个依赖项的所有传递依赖项

all

在 Maven2 中,要排除单个传递依赖项,我必须执行以下操作:

<dependency>
  <groupId>sample.group</groupId>
  <artifactId>sample-artifactB</artifactId>
  <version>1</version>
   <exclusions>
     <exclusion>
       <groupId>sample.group</groupId>
       <artifactId>sample-artifactAB</artifactId>
     </exclusion>
   </exclusions>
</dependency>

这种方法的问题是我必须为每个由sample-artifactB.

有没有办法使用某种通配符来一次排除所有传递依赖项而不是一个接一个?


阅读 69

收藏
2022-05-29

共1个答案

小编典典

对于 maven2,没有办法按照您的描述进行操作。对于 Maven 3,有。如果您使用的是 maven3,请查看此问题的另一个答案

对我有用的东西(可能是 Maven 的一个新特性)只是在排除元素中使用通配符。

我有一个多模块项目,其中包含在两个 WAR 打包模块中引用的“应用程序”模块。其中一个 WAR 打包的模块实际上只需要域类(我还没有将它们从应用程序模块中分离出来)。我发现这个工作:

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>app</artifactId>
    <version>${project.version}</version>
    <exclusions>
        <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

groupId 和 artifactId 上的通配符排除了所有通常会传播到使用此依赖项的模块的依赖项。

对于 maven 2,我建议为具有 <exclusions> 的依赖项创建自己的自定义 pom。对于需要使用该依赖项的项目,请将依赖项设置为您的自定义
pom 而不是典型的工件。虽然这不一定允许您使用单个
排除所有传递依赖项,但它确实允许您只需要编写一次依赖项,并且您的所有项目都不需要维护不必要的长排除列表。

2022-05-29