覆盖Maven中的传递依赖项版本

时间:2017-10-05 21:02:33

标签: maven pom.xml

我的pom中有以下内容

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.4.3</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>1.0-groovy-2.4</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>org.codehaus.groovy</artifactId>
                    <groupId>groovy-all</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-spring</artifactId>
            <version>1.0-groovy-2.4</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>org.codehaus.groovy</artifactId>
                    <groupId>groovy-all</groupId>
                </exclusion>
            </exclusions>
        </dependency>

基本上,我想强制我的第二个和第三个依赖项使用我在第一个依赖项中设置的groovy-all版本。有没有比在每个方面设置排除更好的方法呢?

2 个答案:

答案 0 :(得分:2)

由于作为第一个依赖项,您明确定义了groovy-all依赖项的版本,因此这将覆盖需要此精确依赖项的所有传递依赖项的此依赖项的版本。因此,您不必定义显式排除。

要验证这一点,您可以在更改之前和之后运行以下命令:

mvn dependency:tree -Dverbose

并比较输出。

答案 1 :(得分:0)

修复是通过直接依赖性或依赖性管理部分来锁定版本。