我正在使用配置为强制版本收敛的Enforcer插件的maven 3。我使用的是Spring 3.1.2和Spring Security 3.1.3。
问题是Spring 3.1.3 POM声明了对Spring 3.0.7的依赖,因为这是spring安全性所需的最低版本。这意味着强制执行器插件会抱怨,因为传递依赖关系图中包含Spring 3.1.2和Spring 3.0.7。
修复是明确地将spring 3.0.7排除为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>
答案 0 :(得分:18)
这可能对您没什么帮助,但是有一个功能请求允许在排除项中使用通配符,但它不在当前发行版的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的'dependencies.dependency.exclusions.exclusion.groupId':my.artifactid:值为'*'的ejb-client与有效的id模式不匹配。 @第31行,第30栏
[警告] my.groupid的'dependencies.dependency.exclusions.exclusion.artifactId':my.artifactid:值为'*'的ejb-client与有效的id模式不匹配。 @第32行,第33栏
所以我可能不应该这样做,但确实有效。
因此,您可以在Maven 3.0.3或更高版本中使用artifactId通配符并使其正常工作,但会出现警告并且无法保证与更高版本的兼容性。
答案 1 :(得分:14)
这对我有用,不包括groupId #navigation {
margin: 0 auto;
overflow: hidden;
}
#navigation #logo { display: table-cell; vertical-align: middle; }
#navigation li {
display: inline;
padding: 0px 10px;
margin: 0px 10px;
}
#navigation ul {
display: table-cell; vertical-align: middle;
}
.columns { display: table; width: 100%; }
的所有工件:
org.springframework
答案 2 :(得分:-1)
我遇到了同样的问题。我认为你应该在你的pom.xml中明确包含Spring 3.2.x,以便在Maven解决冲突jar时强制执行0级的spring版本。 请参阅: http://www.baeldung.com/spring-security-with-maven