排除Maven依赖项

Ara*_*d A 23 maven-3 maven

我有一个关于排除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>
Run Code Online (Sandbox Code Playgroud)

我试图实现从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进行排除,但它没有用.请帮忙 .

Mik*_*eck 22

您可以使用依赖关系管理机制.

如果在具有所需3.1.0版本集的spring-security-web和spring-web的pom的<dependencyManagement>部分中创建条目,则工件的托管版本将覆盖在传递依赖关系树中指定的那些.

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


Spe*_*mos 12

全局排除看起来像是在进行,但直到那时......

Sonatype maven参考(页面底部):

顶级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>
Run Code Online (Sandbox Code Playgroud)

它并没有使代码整体更简洁,但它确实使它在重要的地方变得冗长.如果您仍然希望它更简洁,您也可以从Sonatype参考中遵循这些提示.

  • 请参阅此问题:[全局依赖项排除 - MNG-1977](https://issues.apache.org/jira/browse/MNG-1977) (2认同)