我使用的是 Maven 3,并配置了 Enforcer 插件来强制版本收敛。我正在使用 Spring 3.1.2 和 Spring Security 3.1.3。
问题是 Spring 3.1.3 POM 声明了对 Spring 3.0.7 的依赖,因为这是 spring security 所需的最低版本。这意味着执行器插件会抱怨,因为传递依赖图同时包含 Spring 3.1.2 和 Spring 3.0.7。
修复方法是显式排除 spring 3.0.7 作为 spring security 的依赖项,以便执行者插件快乐。
下面的代码片段就是这样做的,它的问题是我必须一遍又一遍地重复相同的片段以获得每个 Spring Security 罐子,这很乏味并且使 pom 难以阅读,有没有办法告诉maven一些事情。
对于依赖org.springframework.security不管artificatId是多少都会忽略安全框架对spring框架的依赖?
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-acl</artifactId>
<version>${spring.security.version}</version>
<exclusions>
<exclusion>
<artifactId>spring-tx</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-asm</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-aop</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-jdbc</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-expression</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
<exclusions>
<exclusion>
<artifactId>spring-aop</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-expression</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>aopalliance</artifactId>
<groupId>aopalliance</groupId>
</exclusion>
<exclusion>
<artifactId>spring-web</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-jdbc</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-tx</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
这对我有用,排除了 groupId 的所有工件
org.springframework
:
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
这可能不会对您有太大帮助,但是有一个功能请求允许在排除中使用通配符,但它不在当前发布版本的 Maven (3.0.4) 中。 (编辑:此功能现已出现在 Maven 3.2.1 中)
https://issues.apache.org/jira/browse/MNG-3832
有趣的是这个 JIRA 问题中的评论:
不确定发生了什么,但这似乎在 Maven 3.0.3 中有效,使用这个:
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
但是,这会产生以下警告:
[警告] 值为“*”的 my.groupid:my.artifactid:ejb-client 的“dependency.dependency.exclusions.exclusion.groupId”与有效的 ID 模式不匹配。 @第31行第30列
[警告] 值为“*”的 my.groupid:my.artifactid:ejb-client 的“dependency.dependency.exclusions.exclusion.artifactId”与有效的 ID 模式不匹配。 @第32行第33列
所以我可能不应该这样做,但它确实有效。
因此,您也许可以在 Maven 3.0.3 或更高版本中使用 artifactId 通配符并使其工作,但会出现警告,并且不保证与更高版本的兼容性。
我遇到了同样的问题。我认为你应该在 pom.xml 中显式包含 Spring 3.2.x,以在 Maven 解决冲突 jar 时强制将 spring 版本设置为 0 级。 请参阅: http://www.baeldung.com/spring-security-with-maven