如何从maven中的组中排除所有工件?

问题描述 投票:0回答: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 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>
maven maven-3
3个回答
43
投票

这对我有用,排除了 groupId 的所有工件

org.springframework

<exclusions>
    <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>*</artifactId>
    </exclusion>
</exclusions>

34
投票

这可能不会对您有太大帮助,但是有一个功能请求允许在排除中使用通配符,但它不在当前发布版本的 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 通配符并使其工作,但会出现警告,并且不保证与更高版本的兼容性。


-2
投票

我遇到了同样的问题。我认为你应该在 pom.xml 中显式包含 Spring 3.2.x,以在 Maven 解决冲突 jar 时强制将 spring 版本设置为 0 级。 请参阅: http://www.baeldung.com/spring-security-with-maven

© www.soinside.com 2019 - 2024. All rights reserved.