Android Studio: "使用默认的Gradle包装器" vs. "使用可定制的Gradle包装器"

54
请问 Android Studio 中的 Gradle 选项有什么区别:
Android Studio->Preferences->Gradle 使用默认 gradle wrapper (建议) 和 使用可定制的 gradle wrapper?
背景:
我正在使用 Android Studio 开发 Android 项目,并使用 Gradle wrapper。
然而,当我使用 Android Studio 设置中的“使用可定制的 gradlew wrapper”选项时,每次我的团队成员使用 GUI 命令同步 Android Studio 项目时,他们发现 gradle/wrapper/gradle-wrapper.properties 文件的日期被更新了(导致 git 存储库上出现额外的 diffs)。
切换为“使用默认 gradle wrapper”似乎解决了这个问题。

1
切换到“使用默认Gradle包装器”似乎解决了这个问题。这是正确的答案! - Natix
1个回答

49

在此处查看IntelliJ IDEA帮助:这里

  • 使用默认的Gradle Wrapper意味着Gradle控制版本号。
  • 使用可定制的Gradle Wrapper意味着IDEA控制Gradle Wrapper的版本号。

版本号存储在gradle/wrapper/gradle-wrapper.properties中。因此,每次使用IDEA打开项目时,选择“使用可定制的Gradle Wrapper”将更改属性文件以调整您在IDEA项目中指定的Wrapper版本。

为了实现可重复构建(即使在不运行IDEA的连续构建服务器上),让Gradle控制版本号并使用默认的Gradle Wrapper。

您可以使用以下代码在build.gradle中设置Gradle使用的版本号:

// needs at least Gradle V1.7
wrapper {
    gradleVersion = '2.2.1'
}
或者
// works with every Gradle version
task wrapper(type: Wrapper) {
    gradleVersion = '2.2.1'
}

注意:不要忘记这个配置仅用于生成包装器。要启用它,您必须使用gradlew wrapper执行生成。此任务将更新gradle-wrapper.properties文件,然后用于所有包装器执行。


1
值得澄清的是,提供的build.gradle包装配置示例是为了配置gradle包装脚本和属性文件的生成,而不是为已生成的包装文件指定gradle版本的替代方法。 - Julian Cerruti
确切地说,build.gradle包装器配置示例提供了gradle包装器的生成配置(使用gradlew wrapper执行)。一旦生成,它将被使用 - 无论在build.gradle中指定了什么。 - ChrLipp
2
我明白。但是在阅读了您的答案后,我进行了相当多的研究才弄清楚那个细节。我试图建议对您(非常好,谢谢!)的答案进行编辑,以使该部分更加清晰。 - Julian Cerruti
你说得对。谢谢你指出来,我已经更新了我的回答。还有谢谢你的积极反馈 :-) - ChrLipp
1
当您启动gradlew时,它会加载gradle/wrapper/gradle-wrapper.properties并检查是否有本地可用的定义版本。如果没有,则会下载它。然后使用该版本执行gradle jar。另一方面,包装器的代码仅用于将版本号写入gradle-wrapper.properties。因此,除非在目标系统上执行构建任务之前调用gradle wrapper,否则将忽略该逻辑。 - ChrLipp
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接