排除Maven依赖项

时间:2012-02-02 19:57:55

标签: maven maven-3

我有一个关于排除maven依赖项的查询。请考虑以下

   <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>${spring-security.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>3.1.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.1.0.RELEASE</version>
    </dependency>
    <dependency>

我正在尝试实现从Spring 3.0.6到3.1.0的过渡。 Spring安全性3.1.0依赖于spring-security-web 3.0.6版本,而后者依赖于spring-web 3.0.6。我需要把它全部带到3.1.0。所以我从Spring安全性中排除了spring-security-web,对spring-security-web 3.1.0有一个单独的依赖,后者又排除了spring-web 3.0.6版本,我提供了一个单独的spring-web 3.1.0版本。这项工作,但我觉得会有一个更容易的方法。我尝试在Spring安全下对spring web进行排除,但它没有用。请帮忙。

2 个答案:

答案 0 :(得分:21)

您可以使用dependency management mechanism

如果您在&lt; dependencyManagement&gt;中创建条目对于具有所需3.1.0版本集的spring-security-web和spring-web的pom部分,工件的托管版本将覆盖在传递依赖树中指定的那些。

我不确定这是否真的能为您节省任何代码,但它是一个更清洁的解决方案IMO。

答案 1 :(得分:12)

全球排除look like they're being worked on,但在此之前......

Sonatype maven reference(页面底部):

  

顶级POM中的依赖关系管理不同于   定义对广泛共享的父POM的依赖。对于初学者来说,一切   依赖项是继承的。如果mysql-connector-java被列为   顶级父项目的依赖关系,每个项目的依赖关系   层次结构将引用此依赖关系。代替   添加不必要的依赖项,使用dependencyManagement允许   您要巩固和集中管理依赖性   没有添加所有人继承的依赖项的版本   儿童。换句话说,dependencyManagement元素是   相当于一个允许你声明一个的环境变量   项目下方的任何位置,而不指定版本   号。

举个例子:

  <dependencies>
    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>3.0.5.RELEASE</version>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>commons-httpclient</groupId>
        <artifactId>commons-httpclient</artifactId>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    </dependencies>
  </dependencyManagement>

它不会使代码总体上更简洁,但它确实使它在重要的地方变得冗长。如果您仍然希望它更简洁,您也可以从Sonatype引用中follow these tips