即使我有一个指定版本18的部分,Maven仍在过渡性地引入了 Guava 的版本16。

快速总结:

  • gwizard-example取决于gwizard-config
  • gwizard-config有一个父pom,gwizard-parent
  • gwizard-parent具有,它指定了 Guava
  • 的版本18

    幸运的是,这是一个开源项目,因此您可以直接看到poms:gwizard-parentgwizard-configgwizard-example。但是,这是gwizard-parent中的重要部分:
    <properties>
        <guava.version>18.0</guava.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    ...以及在gwizard-example中声明的简洁的依赖项:
    <properties>
        <gwizard.version>0.5</gwizard.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.gwizard</groupId>
            <artifactId>gwizard-config</artifactId>
            <version>${gwizard.version}</version>
        </dependency>
    </dependencies>
    

    gwizard-config的依赖关系树正确显示了 Guava 18:
    [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gwizard-config ---
    [INFO] org.gwizard:gwizard-config:jar:0.5
    [INFO] +- com.google.inject:guice:jar:4.0-beta5:compile
    [INFO] |  \- com.google.guava:guava:jar:18.0:compile
    

    但是,gwizard-example的依赖关系树显示了 Guava 16(这会导致问题):
    [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gwizard-example ---
    [INFO] org.gwizard:gwizard-example:jar:1.0-SNAPSHOT
    [INFO] +- org.gwizard:gwizard-config:jar:0.5:compile
    [INFO] |  +- com.google.inject:guice:jar:4.0-beta5:compile
    [INFO] |  |  \- com.google.guava:guava:jar:16.0.1:compile
    

    这是使用Maven v3.2.5。我很困惑。救命?

    可能相关:dependencyManagement in parent ignored

    更新:github上链接的poms正在更改;在gwizard-services中添加一个对gwizard-example的依赖关系(直接声明一个 Guava dep)可以解决该问题。这里仍然存在某种不良的底层行为。

    UPDATE :已创建this JIRA issue

    最佳答案

    有一件简单的事情。 dependencyManagement并未声明确实使用过的依赖关系,而只是定义了版本等。可以使用

    如果您定义这样的内容,则不会导致更改。

    <properties>
        <guava.version>18.0</guava.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    如果您真的想覆盖树中使用的版本,则需要定义一个真正的依赖项:
    因此,根据以上定义,您还需要添加以下内容:

    <dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>
    </dependencies>
    

    如果添加了此内容,请稍后通过mvn dependency:tree进行检查。

    09-05 08:31