gradle - 相同的 Gradle 文件,相同的代码库,不同开发人员的不同依赖关系图

标签 gradle

这个问题对我来说似乎是一个真正的谜。我们正在开发一个 Spring REST 应用程序。在我的团队中,我们让 Jenkins 在所有 checkin (CI 构建)上运行构建。此外,还有一个官方版本,每晚都在 elsehwere 完成。一些集成测试最近在 CI 构建期间开始失败,我们追踪了 jar 冲突的原因。但是,我们之前已经成功排除了导致这些冲突的传递依赖,对于官方构建和团队中的一些开发人员来说,这仍然是正确的。对于其他人来说,它不再是。

我们有相同的代码库和相同的 Gradle 文件。当我在我的系统上运行依赖任务时,我在一个子项目中有一棵传递依赖的长树(就像 Jenkins 机器一样),而其他的则没有这样的树。此外,对于某些开发人员而言,WAR 的大小比其他开发人员大几个数量级。传递依赖来自另一个上传到 Nexus 的相关项目。

我已经刷新了我的机器和 Jenkins 机器上的依赖关系,甚至清除了 .gradle,但无济于事。

这听起来像是环境问题,但 Gradle 版本和 Java 版本大致相同,最多有几个小版本。

关于什么可能导致这种差异的任何想法?

最佳答案

您可以强制您的依赖项全面适用于特定版本

def gsonModule = 'com.google.code.gson:gson'
configurations.all {
    resolutionStrategy {
        // add dependency substitution rules
        dependencySubstitution {
            substitute module(gsonModule) with module("$gsonModule:2.6.1")
        }
    }
}

// note: configurations block must be above the dependencies
// or build will error
dependencies {
    compile "$gsonModule:2.7"
}

然后,当任何开发人员/CI/test/CD 运行构建时,您的 resolutionStrategy强制所有编译的一致性。 gradle 中的默认行为是在版本冲突时使用较新的版本。这将强制所有版本相同,无论其声明的版本如何。
$ ./gradlew dependencies --configuration compile -q

------------------------------------------------------------
Root project
------------------------------------------------------------

compile - Dependencies for source set 'main'.
\--- com.google.code.gson:gson:2.7 -> 2.6.1

引用:https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

关于gradle - 相同的 Gradle 文件,相同的代码库,不同开发人员的不同依赖关系图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41219121/

相关文章:

android - 无法从 Gradle 中的 jitpack 添加库

android - 使用Eclipse和Gradle的Stripe-android

compiler-construction - Gradle buildscript无法 “compile build”我的应用程序

java - Android |二进制XML文件错误膨胀类|无法使用本 map 书馆的类(class)

android - 将项目拆分为模块

android - 找不到....未指定

java - 基于 gradle.settings 的 Gradle sourceSets

java - 无法在Liferay 7中部署Portlet

android - 将 Firebase 核心从版本 16 更新到 17 导致编译错误

java - 在使用 Gradle 构建的 Java 代码中使用 C++ 代码的正确方法是什么?