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

Override version of transitive dependencies in Maven

我的 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 的版本——我在第一个依赖项中设置的所有内容。有没有比对它们中的每一个都设置排除更好的方法来做到这一点?

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

要验证这一点,您可以 运行 更改前后的以下内容:

mvn dependency:tree -Dverbose

并比较输出。

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