如何/何时生成Gradle包装文件?
我正试图了解Gradle包装器是如何工作的。 在许多来源回购中,我看到以下结构:
projectRoot/ src/ build.gradle gradle.properties settings.gradle gradlew gradlew.bat gradle/ wrapper/ gradle-wrapper.jar gradle-wrapper.properties
我的问题:
- 如何/何时生成
gradlew
/gradlew.bat
? 你是否应该在项目第一次创build时只生成一次,每次提交/推送更改时是否生成它们? 他们是如何产生的? - 上面同样的问题,但是对于
gradle/wrapper/*
文件(gradle-wrapper.jar
和gradle-wrapper.properties
)? - 有时我会在项目的
gradle
目录中看到其他*.gradle
文件。 什么是这些额外的Gradle文件,他们代表/做什么? 自定义插件? - 进入
settings.gradle
属性与在gradle.properties
应该定义的内容有什么gradle.properties
?
-
你生成一次,再次当你想改变你在项目中使用的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服务器上毫无意义),这将需要更多的空间。
-
这些是Gradle Wrapper文件。 您需要生成一次(针对特定版本)并添加到版本控制中。 如果您需要更改Gradle Wrapper的版本,请在
build.gradle
更改版本,请参阅(1.)并重新生成文件。 -
举一个详细的例子。 这样的文件可能有多种用途:多模块项目,责任分离,略微修改的脚本等。
-
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") }
-
你将会生成一次,但是如果你需要一个新的特性或者一个插件需要更新的gradle版本,就更新它们。
最简单的方法来更新:从Gradle 2.2开始,您可以下载并提取完整或二进制Gradle发行版 ,然后运行:
$ <pathToExpandedZip>/bin/gradle wrapper
不需要定义一个任务,虽然你可能需要某种
build.gradle
文件。这将更新或创build
gradlew
和gradlew.bat
包装以及gradle/wrapper/gradle-wrapper.properties
和gradle-wrapper.jar
来提供当前版本的gradle,wrap。 -
这些都是包装的一部分。
-
一些
build.gradle
文件引用子目录中的其他文件或文件,这些子目录是子项目或模块。 它有点复杂,但如果你有一个项目,你基本上需要一个文件。 -
settings.gradle
处理项目,模块和其他types的名称和设置,gradle.properties
configurationgradle文件的可重用variables,如果你喜欢,你觉得他们会更清楚的方式。
这是用来告诉Gradle升级包装的命令,这样它将获取包含源代码的库的分发版本:
./gradlew wrapper --gradle-version <version> --distribution-type all
使用“all”指定分发types将确保Gradle下载源文件以供您的开发环境使用。
优点 :
- IDE将立即访问源代码。 例如,Intellij IDEA不会提示您更新构build脚本以包含源代码发行版(因为此命令已经这样做)
缺点 :
- 更长/更大的构build过程,因为它正在下载源代码。 这是对源代码不必要的构build或CI服务器上的时间/空间的浪费。
如果您知道任何命令行选项以告诉Gradle不要在构build服务器上下载源,请评论或提供另一个答案。
- “minifyEnabled”vs“shrinkResources” – 有什么区别? 以及如何获得节省的空间?
- 如何将Apache HTTP API(legacy)作为编译时间依赖项添加到Android M的build.grade中?
- Gradle构buildnull控制台对象
- Gradle错误:任务执行失败':app:processDebugGoogleServices'
- android studio 0.4.2:Gradle项目同步失败的错误
- Android Studio:找不到com.android.tools.build:gradle:2.0.0-alpha2
- 添加资源,configuration文件到您的jar使用gradle
- 错误:执行任务':app:packageRelease'失败。 >无法计算/../AndroidStudioProjects/../classes.jar的散列
- 在intellij IDEA中使用gradle构build获取gradle依赖关系