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

时间:2012-10-22 19:43:49

标签: maven maven-3

我正在使用配置为强制版本收敛的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>

3 个答案:

答案 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