我将 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 安全的依赖项,以便执行器插件快乐。
下面的代码片段就是这样做的,它的问题是我不得不为每个 jar 的 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>
最佳答案
这可能对您没有多大帮助,但是有一个功能请求允许排除项中的通配符,但是它不在 Maven (3.0.4) 的当前发行版中。 (编辑:此功能现在存在于 Maven 3.2.1 中)
https://issues.apache.org/jira/browse/MNG-3832
有趣的是这个 JIRA 问题中的评论:
Not sure what's going on, but this seems to work in Maven 3.0.3, using this:
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
However, this produces these warnings:
[WARNING] 'dependencies.dependency.exclusions.exclusion.groupId' for my.groupid:my.artifactid:ejb-client with value '*' does not match a valid id pattern. @ line 31, column 30
[WARNING] 'dependencies.dependency.exclusions.exclusion.artifactId' for my.groupid:my.artifactid:ejb-client with value '*' does not match a valid id pattern. @ line 32, column 33
So I probably shouldn't be doing it, but it does work.
因此,您可能可以在 Maven 3.0.3 或更高版本中使用 artifactId 通配符并使其工作,但会出现警告并且不保证与更高版本的兼容性。
关于maven - 如何从 maven 中的组中排除所有 Artifact ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13018625/