maven - 如何从 maven 中的组中排除所有 Artifact ?

标签 maven maven-3

我将 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/

相关文章:

maven - Maven 目标去哪里了?

java - MAVEN_HOME、MVN_HOME 或 M2_HOME

maven - Sonatype Nexus的Grails Release插件maven-deploy命令失败401错误

java - 如何在 gradle 中使用本地 Maven 存储库中的 jar

maven - 当将null作为varargs参数发送时,Gradle和Maven的行为不同

java - 如何从依赖中获取子依赖或版本?

java - Eclipse 忽略 Maven 测试范围的依赖项

java - 在 Maven 中替换文件的正确方法是什么?

java - Maven 3.1.0 破坏了 Google App Engine Maven 插件

java - Maven 配置文件属性不是 "overriding"