来自Gradle的文档:

此任务生成的脚本将提交给 你的版本控制系统。此任务还生成一个小 JAR引导JAR文件和属性文件 也要忠于你的风投。脚本委托给这个JAR。

来自:什么不应该在源代码控制下?

我认为生成的文件不应该在VCS中。

什么时候需要gradlew和gradle/gradle-wrapper.jar ?

为什么不在构建中存储一个gradle版本呢?gradle文件?


当前回答

因为Gradle包装器的全部意义在于,在没有安装过Gradle的情况下

JDK也是一样,你也想提交吗?你是否也提交了所有的依赖库?

随着新版本的发布,依赖关系应该不断升级,以获得安全性和其他错误修复,因为如果您远远落后于更新,那么再次更新将是一项非常耗时的任务。

如果Gradle包装器为每个新版本都增加,并且被提交,那么回购将变得非常大。在使用分布式VCS时,这个问题很明显,因为克隆会下载所有版本的所有内容。

甚至不知道它是如何运作的

创建一个构建脚本,下载包装器并使用它进行构建。每个人都不需要知道脚本是如何工作的,他们需要同意通过执行脚本来构建项目。

从哪里下载,哪个版本

task wrapper(type: Wrapper) {
  gradleVersion = 'X.X' 
}

对于Gradle版本>= 5:

wrapper {
  gradleVersion = 'X.X' 
}

然后

gradle wrapper

下载正确的版本。

从VCS中克隆项目,执行其中包含的gradlew脚本,无需任何额外步骤即可构建项目。

通过上述步骤解决。下载Gradle包装器与下载其他依赖没有什么不同。脚本可以非常智能地检查当前的Gradle包装器,只有在有新版本时才下载它。

如果开发人员以前从未使用过Gradle,可能不知道项目是用Gradle构建的,那么运行build.sh比运行gradlew构建更明显。

如果你所拥有的只是一个gradle版本号。你需要一个README解释每个人gradle版本X必须从URL Y下载并安装,

不,您不需要README。你可以有一个,但我们是开发人员,我们应该尽可能地自动化。创建脚本更好。

每次版本增加的时候都要这样做。

如果开发人员同意正确的流程是:

克隆回购 运行构建脚本

然后升级到最新的Gradle包装是没有问题的。如果自上次运行以来版本增加了,脚本可以下载新版本。

其他回答

因为gradle包装器的全部意义在于,不需要安装gradle,甚至不知道它是如何工作的,从哪里下载,哪个版本,就可以从VCS中克隆项目,执行它包含的gradlew脚本,无需任何额外步骤就可以构建项目。

如果你所拥有的只是一个gradle版本号。gradle文件,你将需要一个README解释每个人,gradle版本X必须从URL Y下载和安装,你将不得不这样做,每次版本是增量。

老问题,新答案。如果你不经常升级gradle(我们大多数人都不),最好把它提交给vc。对我来说,主要原因是为了提高CI服务器上的构建速度。现在,大多数项目都是由CI服务器构建和安装的,每次都是不同的服务器实例。

如果您不提交它,CI服务器将为每次构建下载一个jar,这将显著增加构建时间。还有其他方法可以处理这个问题,但我发现这种方法最容易维护。

因为Gradle包装器的全部意义在于,在没有安装过Gradle的情况下

JDK也是一样,你也想提交吗?你是否也提交了所有的依赖库?

随着新版本的发布,依赖关系应该不断升级,以获得安全性和其他错误修复,因为如果您远远落后于更新,那么再次更新将是一项非常耗时的任务。

如果Gradle包装器为每个新版本都增加,并且被提交,那么回购将变得非常大。在使用分布式VCS时,这个问题很明显,因为克隆会下载所有版本的所有内容。

甚至不知道它是如何运作的

创建一个构建脚本,下载包装器并使用它进行构建。每个人都不需要知道脚本是如何工作的,他们需要同意通过执行脚本来构建项目。

从哪里下载,哪个版本

task wrapper(type: Wrapper) {
  gradleVersion = 'X.X' 
}

对于Gradle版本>= 5:

wrapper {
  gradleVersion = 'X.X' 
}

然后

gradle wrapper

下载正确的版本。

从VCS中克隆项目,执行其中包含的gradlew脚本,无需任何额外步骤即可构建项目。

通过上述步骤解决。下载Gradle包装器与下载其他依赖没有什么不同。脚本可以非常智能地检查当前的Gradle包装器,只有在有新版本时才下载它。

如果开发人员以前从未使用过Gradle,可能不知道项目是用Gradle构建的,那么运行build.sh比运行gradlew构建更明显。

如果你所拥有的只是一个gradle版本号。你需要一个README解释每个人gradle版本X必须从URL Y下载并安装,

不,您不需要README。你可以有一个,但我们是开发人员,我们应该尽可能地自动化。创建脚本更好。

每次版本增加的时候都要这样做。

如果开发人员同意正确的流程是:

克隆回购 运行构建脚本

然后升级到最新的Gradle包装是没有问题的。如果自上次运行以来版本增加了,脚本可以下载新版本。

根据Gradle文档,将Gradle - Wrapper .jar添加到VCS是预期的,因为让开发者可以使用Gradle Wrapper是Gradle方法的一部分:

要使Wrapper文件对其他开发人员和执行环境可用,您需要将它们检入版本控制。包括JAR文件在内的所有包装器文件都非常小。需要将JAR文件添加到版本控制中。有些组织不允许项目向版本控制提交二进制文件。目前,这种方法没有其他选择。

我想推荐一个简单的方法。

在项目的README中,说明安装步骤是必需的,即:

gradle wrapper --gradle-version 3.3

这适用于Gradle 2.4或更高版本。这将创建一个包装器,而不需要将专用任务添加到“build.gradle”中。

使用此选项,忽略(不签入)这些文件/文件夹进行版本控制:

./gradle 格拉德卢 格拉德卢.bat

关键的好处是您不必将下载的文件签入源代码控制。它的安装需要额外的一步。我认为这是值得的。