猿问

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

在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。


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


烙印99
浏览 868回答 3
3回答

元芳怎么了

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

慕容708150

对我有用的东西(可能是Maven的新功能)仅仅是在排除元素中做通配符。我有一个多模块项目,其中包含一个“app”模块,该模块在两个WAR打包的模块中引用。其中一个WAR打包的模块实际上只需要域类(我还没有将它们从app模块中分离出来)。我发现这个工作:<dependency>&nbsp; &nbsp; <groupId>${project.groupId}</groupId>&nbsp; &nbsp; <artifactId>app</artifactId>&nbsp; &nbsp; <version>${project.version}</version>&nbsp; &nbsp; <exclusions>&nbsp; &nbsp; &nbsp; &nbsp; <exclusion>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <groupId>*</groupId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <artifactId>*</artifactId>&nbsp; &nbsp; &nbsp; &nbsp; </exclusion>&nbsp; &nbsp; </exclusions></dependency>groupId和artifactId上的通配符排除了通常使用此依赖关系传播到模块的所有依赖项。

倚天杖

我觉得有用的一件事:如果将依赖项与依赖项放在项目的父POM的dependencyManagement部分中,或者在可导入的依赖项管理POM中,那么您不需要重复排除(或版本)。例如,如果您的父POM具有:<dependencyManagement>&nbsp; &nbsp; <dependencies>&nbsp; &nbsp; ...&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <dependency>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <groupId>commons-fileupload</groupId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <artifactId>commons-fileupload</artifactId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <version>1.2.1</version>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <exclusions>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <exclusion>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <groupId>junit</groupId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <artifactId>junit</artifactId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </exclusion>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </exclusions>&nbsp; &nbsp; &nbsp; &nbsp; </dependency>&nbsp; &nbsp; &nbsp;....&nbsp; </dependencies></dependencyManagement>然后,项目中的模块可以简单地将依赖关系声明为:&nbsp; &nbsp; &nbsp; &nbsp; <dependency>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <groupId>commons-fileupload</groupId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <artifactId>commons-fileupload</artifactId>&nbsp; &nbsp; &nbsp; &nbsp; </dependency>父POM中将指定版本和排除项。我几乎在所有项目中使用这种技术,它消除了大量的重复。
随时随地看视频慕课网APP
我要回答