为什么Gradle Wrapper要承诺VCS?
从Gradle的文档: https : //docs.gradle.org/current/dsl/org.gradle.api.tasks.wrapper.Wrapper.html
这个任务生成的脚本将被用于你的版本控制系统。 此任务还会生成一个小的gradle-wrapper.jar引导JAR文件和属性文件,这些文件也应该提交给您的VCS。 脚本委托给这个JAR。
来自: 什么不应该在源代码控制之下?
我认为Generated files
不应该在VCS中。
何时需要gradlew
和gradle/gradle-wrapper.jar
?
为什么不在build.gradle
文件中存储gradle version
?
因为gradle包装器的整个目的是在没有安装gradle的情况下,甚至不知道它是如何工作的,从哪个版本下载,从VCS复制项目,执行gradlew脚本包含并构build项目,而无需任何额外的步骤。
如果你在build.gradle文件中只有一个gradle版本号,那么你需要一个自述文件来解释每个人必须从安装的URL Y下载gradle版本X,每次增加版本时你都必须这样做。
因为gradle包装的整个要点是可以的,没有安装gradle
JDK也有同样的说法,你也想承诺吗? 你还承诺你所有的依赖库吗?
随着新版本的发布,依赖关系应该不断升级。 获得安全性和其他错误修复。 而且,因为如果你远远落后,那么重新开始日程可能是一项非常耗时的任务。
如果每个新版本的Gradle包装都增加了,并且它被提交,回购将会变得非常大。 使用分布式VCS时,问题是显而易见的,其中克隆将下载所有版本的所有版本。
,甚至不知道它是如何工作的
创build一个构build脚本,下载包装并使用它构build。 每个人都不需要知道脚本是如何工作的,他们需要同意通过执行它来构build项目。
,从哪里下载,哪个版本
task wrapper(type: Wrapper) { gradleVersion = 'XX' }
接着
gradle wrapper
要下载正确的版本。
,从VCS克隆项目,执行其包含的gradlew脚本,并且无需任何额外的步骤即可构build项目。
通过以上步骤解决。 下载Gradle包装与下载任何其他依赖没有区别。 该脚本可以聪明地检查任何当前的gradle包装,只有在有新版本的情况下才能下载。
如果开发者之前从未使用Gradle,也许不知道该项目是使用Gradle构build的。 那么运行“build.sh”比运行“gradlew build”更明显。
如果你只有一个build.gradle文件中的gradle版本号,那么你需要一个自述文件来解释每个人必须从URL Y下载安装的Gradle版本X,
不,你不需要一个自述文件。 你可以有一个,但我们是开发者,我们应该尽可能自动化。 创build一个脚本更好。
每当版本增加时你都必须这样做。
如果开发者同意正确的过程是:
- 克隆回购
- 运行构build脚本
那么升级到最新的gradle包装是没有问题的。 如果版本自上次运行后增加,则脚本可以下载新版本。
我想推荐一个简单的方法。
在您的项目的自述文件中,logging需要安装步骤,即:
gradle wrapper --gradle-version 3.3
这适用于Gradle 2.4或更高版本。 这创build了一个包装器,而不需要将任务添加到“build.gradle”中。
使用这个选项, 忽略 (不检查)这些文件/文件夹的版本控制:
- ./gradle
- gradlew
- gradlew.bat
关键的好处是,你不必检入下载的文件到源代码pipe理。 安装需要一个额外的步骤。 我认为这是值得的。