49

我正在使用配置了 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 的依赖项,以便执行器插件快乐。

下面的代码片段就是这样做的,它的问题是我必须一遍又一遍地重复相同的片段以获得每个 jar 的 spring security,这很乏味并且使 pom 难以阅读,有没有办法告诉行家的东西。

对于依赖 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>
4

3 回答 3

32

这可能不会对您有太大帮助,但是有一个功能请求允许在排除项中使用通配符,但是它不在当前的 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 的“dependencies.dependency.exclusions.exclusion.groupId”值为“*”与有效的 id 模式不匹配。@ 第 31 行,第 30 列

[警告] my.groupid:my.artifactid:ejb-client 的“dependencies.dependency.exclusions.exclusion.artifactId”值为“*”与有效的 id 模式不匹配。@ 第 32 行,第 33 列

所以我可能不应该这样做,但它确实有效。

因此,您可能能够在 Maven 3.0.3 或更高版本中使用 artifactId 通配符并使其正常工作,但会出现警告并且不保证与更高版本的兼容性。

于 2012-10-23T01:33:22.870 回答
29

这对我有用,不包括 groupId 的所有工件org.springframework

<exclusions>
    <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>*</artifactId>
    </exclusion>
</exclusions>
于 2016-05-18T11:12:20.813 回答
-1

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

于 2013-05-18T07:37:45.907 回答