在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提供的每个传递依赖项都这样做。

是否有一种方法可以使用某种通配符一次性排除所有传递依赖项,而不是逐个排除?


当前回答

你排除所有传递依赖的原因是什么?

如果您需要从每个依赖项中排除一个特定的工件(例如common -logging), Version 99 Does Not Exist方法可能会有所帮助。


2012年更新:不要使用这种方法。使用maven-enforcer-plugin和排除。版本99产生了虚假的依赖关系,并且版本99存储库处于离线状态(有类似的镜像,但您也不能依赖它们永远保持在线状态;最好只使用Maven Central)。

其他回答

你排除所有传递依赖的原因是什么?

如果您需要从每个依赖项中排除一个特定的工件(例如common -logging), Version 99 Does Not Exist方法可能会有所帮助。


2012年更新:不要使用这种方法。使用maven-enforcer-plugin和排除。版本99产生了虚假的依赖关系,并且版本99存储库处于离线状态(有类似的镜像,但您也不能依赖它们永远保持在线状态;最好只使用Maven Central)。

如果你在Eclipse下开发,你可以在POM编辑器(启用高级选项卡)依赖关系图中寻找你想要排除的项目依赖关系,然后:

右键单击它->“Exclude Maven Artifact…”Eclipse将为您排除,而不需要查找库链接到哪个依赖项。

我发现有一件事很有用:

如果您将带有排除项的依赖项放在项目的父POM的dependencyManagement部分中,或者放在可导入的依赖项管理POM中,那么您就不需要重复排除项(或版本)。

例如,如果你的父POM有:

<dependencyManagement>
    <dependencies>
    ...         
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.1</version>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
     ....
  </dependencies>
</dependencyManagement>

然后,项目中的模块可以简单地将依赖声明为:

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
        </dependency>

父POM中的将指定版本和排除项。我几乎在我们所有的项目中都使用了这个技巧,它消除了很多重复。

对于maven2,没有办法做到您所描述的。对于maven 3,有。如果您正在使用maven 3,请参阅这个问题的另一个答案

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

目前,没有办法一次排除一个以上的可传递依赖,但在Maven JIRA站点上有一个特性请求:

https://issues.apache.org/jira/browse/MNG-2315