如何/何时生成Gradle包装文件?

我正试图了解Gradle包装器是如何工作的。 在许多来源回购中,我看到以下结构:

projectRoot/ src/ build.gradle gradle.properties settings.gradle gradlew gradlew.bat gradle/ wrapper/ gradle-wrapper.jar gradle-wrapper.properties 

我的问题:

  1. 如何/何时生成gradlew / gradlew.bat ? 你是否应该在项目第一次创build时只生成一次,每次提交/推送更改时是否生成它们? 他们是如何产生的?
  2. 上面同样的问题,但是对于gradle/wrapper/*文件( gradle-wrapper.jargradle-wrapper.properties )?
  3. 有时我会在项目的gradle目录中看到其他*.gradle文件。 什么是这些额外的Gradle文件,他们代表/做什么? 自定义插件?
  4. 进入settings.gradle属性与在gradle.properties应该定义的内容有什么gradle.properties
  1. 你生成一次,再次当你想改变你在项目中使用的Gradle的版本。 没有必要经常产生。 这里是文档。 只需将wrapper任务添加到build.gradle文件并运行此任务以获取包装结构。

    请注意,您需要安装Gradle来生成一个包装器。 用于pipe理g生态系统工件的好工具是SDKMAN! 。 要生成一个gradle包装,添加下面的一段代码build.gradle文件:

     task wrapper(type: Wrapper) { gradleVersion = '2.0' //version required } 

    并运行:

     gradle wrapper 

    任务。 将结果文件添加到SCM(例如git),从现在开始,所有的开发者在使用Gradle Wrapper时都会有相同版本的Gradle。

    使用Gradle 2.4 (或更高版本),您可以在不添加专门任务的情况下设置包装器:

     gradle wrapper --gradle-version 2.3 

    要么

     gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip 

    所有的细节可以在这里find

从Gradle 3.1 --distribution-type选项也可以使用。 选项是二进制和全部bin所有额外包含源代码和文档。 当使用IDE时, 所有这一切都更好,所以编辑器效果更好。 缺点是构build可能会持续更长的时间(需要下载更多的数据,在CI服务器上毫无意义),这将需要更多的空间。

  1. 这些是Gradle Wrapper文件。 您需要生成一次(针对特定版本)并添加到版本控制中。 如果您需要更改Gradle Wrapper的版本,请在build.gradle更改版本,请参阅(1.)并重新生成文件。

  2. 举一个详细的例子。 这样的文件可能有多种用途:多模块项目,责任分离,略微修改的脚本等。

  3. settings.gradle负责项目的结构(模块,名称等),而gradle.properties用于项目和Gradle的外部细节(版本,命令行参数-XX ,属性等)

生成Gradle包装器

项目build立gradle

 // Top-level build file where you can add configuration options common to all sub-projects/modules. // Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain. task wrapper(type: Wrapper) { gradleVersion = '2.2' } // Look Google doesn't use Maven Central, they use jcenter now. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } 

然后在命令行运行

 gradle wrapper 

如果您在系统上丢失了gradle,请安装它,否则上述操作将不起作用。 在Mac上,最好通过自制软件安装。

 brew install gradle 

成功运行包装任务并生成gradlew ,请勿使用您的系统gradle。 它会为你节省很多头痛。

 ./gradlew assemble 

那么上面看到的gradle插件呢?

 com.android.tools.build:gradle:1.0.1 

您应该将版本设置为最新版本,您可以检查工具页面并相应地编辑版本。

查看Android Studio生成的内容

gradle和最新的Android Studio的添加极大地改变了项目布局。 如果您有一个较旧的项目,我强烈build议使用最新的Android Studio创build一个干净的项目,并查看Google认为标准项目的内容。

Android Studio可以导入旧的项目,也可以提供帮助。

从Gradle 2.4开始,您可以使用gradle wrapper --gradle-version XX来configuration特定版本的Gradle包装,而不需要将任何任务添加到您的build.gradle文件中。 下一次使用包装器时,它将下载适当的Gradle分配以匹配。

如果你想用源码和文档下载gradle,在gradle-wrapper.properites中configuration的默认分发URL将不能满足你的需求。它是distributions/gradle-2.10-bin.zip ,而不是distributions/gradle-2.10-all.zip 。这个完整的url是由IDE提出的,比如Android Studio。如果你想下载完整的Gradle,你可以像这样configuration包装任务:

 task wrapper(type: Wrapper) { gradleVersion = '2.13' distributionUrl = distributionUrl.replace("bin", "all") } 
  1. 你将会生成一次,但是如果你需要一个新的特性或者一个插件需要更新的gradle版本,就更新它们。

    最简单的方法来更新:从Gradle 2.2开始,您可以下载并提取完整或二进制Gradle发行版 ,然后运行:

     $ <pathToExpandedZip>/bin/gradle wrapper 

    不需要定义一个任务,虽然你可能需要某种build.gradle文件。

    这将更新或创buildgradlewgradlew.bat包装以及gradle/wrapper/gradle-wrapper.propertiesgradle-wrapper.jar来提供当前版本的gradle,wrap。

  2. 这些都是包装的一部分。

  3. 一些build.gradle文件引用子目录中的其他文件或文件,这些子目录是子项目或模块。 它有点复杂,但如果你有一个项目,你基本上需要一个文件。

  4. settings.gradle处理项目,模块和其他types的名称和设置, gradle.propertiesconfigurationgradle文件的可重用variables,如果你喜欢,你觉得他们会更清楚的方式。

这是用来告诉Gradle升级包装的命令,这样它将获取包含源代码的库的分发版本:

 ./gradlew wrapper --gradle-version <version> --distribution-type all 

使用“all”指定分发types将确保Gradle下载源文件以供您的开发环境使用。

优点

  • IDE将立即访问源代码。 例如,Intellij IDEA不会提示您更新构build脚本以包含源代码发行版(因为此命令已经这样做)

缺点

  • 更长/更大的构build过程,因为它正在下载源代码。 这是对源代码不必要的构build或CI服务器上的时间/空间的浪费。

如果您知道任何命令行选项以告诉Gradle不要在构build服务器上下载源,请评论或提供另一个答案。