我有一个关于排除maven依赖项的查询。请考虑以下
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring-security.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.1.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
<dependency>
我正在尝试实现从Spring 3.0.6到3.1.0的过渡。 Spring安全性3.1.0依赖于spring-security-web 3.0.6版本,而后者依赖于spring-web 3.0.6。我需要把它全部带到3.1.0。所以我从Spring安全性中排除了spring-security-web,对spring-security-web 3.1.0有一个单独的依赖,后者又排除了spring-web 3.0.6版本,我提供了一个单独的spring-web 3.1.0版本。这项工作,但我觉得会有一个更容易的方法。我尝试在Spring安全下对spring web进行排除,但它没有用。请帮忙。
答案 0 :(得分:21)
您可以使用dependency management mechanism。
如果您在&lt; dependencyManagement&gt;中创建条目对于具有所需3.1.0版本集的spring-security-web和spring-web的pom部分,工件的托管版本将覆盖在传递依赖树中指定的那些。
我不确定这是否真的能为您节省任何代码,但它是一个更清洁的解决方案IMO。
答案 1 :(得分:12)
全球排除look like they're being worked on,但在此之前......
从Sonatype maven reference(页面底部):
顶级POM中的依赖关系管理不同于 定义对广泛共享的父POM的依赖。对于初学者来说,一切 依赖项是继承的。如果mysql-connector-java被列为 顶级父项目的依赖关系,每个项目的依赖关系 层次结构将引用此依赖关系。代替 添加不必要的依赖项,使用dependencyManagement允许 您要巩固和集中管理依赖性 没有添加所有人继承的依赖项的版本 儿童。换句话说,dependencyManagement元素是 相当于一个允许你声明一个的环境变量 项目下方的任何位置,而不指定版本 号。
举个例子:
<dependencies>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
它不会使代码总体上更简洁,但它确实使它在重要的地方变得冗长。如果您仍然希望它更简洁,您也可以从Sonatype引用中follow these tips。