Gradle - 构建脚本
Gradle 构建了一个脚本文件来处理两件事; 一个是项目,另一个是任务。 每个 Gradle 构建都代表一个或多个项目。
项目代表一个库 JAR 或一个 Web 应用程序,或者它可能代表一个由其他项目生成的 JAR 组装而成的 ZIP。 简单来说,一个项目是由不同的任务组成的。
任务是指构建执行的一项工作。 一项任务可能是编译一些类、创建 JAR、生成 Javadoc 或将一些档案发布到存储库。
Gradle 使用 Groovy 语言编写脚本。
编写构建脚本
Gradle 提供了一种领域特定语言 (DSL),用于描述构建。 这使用 Groovy 语言来更容易地描述构建。 Gradle 的每个构建脚本都使用 UTF-8 编码,离线保存并命名为 build.gradle。
build.gradle
我们使用 Groovy 脚本来描述任务和项目。 您可以使用 Gradle 命令运行 Gradle 构建。 此命令查找名为 build.gradle. 的文件
看看下面的例子,它代表了一个打印 tutorialspoint 的小脚本。
将以下脚本复制并保存到名为 build.gradle 的文件中。 此构建脚本定义了一个任务名称 hello,用于打印 tutorialspoint 字符串。
task hello { doLast { println 'tutorialspoint' } }
在build.gradle文件所在的命令提示符下执行以下命令。
C:\> gradle –q hello
输出
您将看到以下输出 −
tutorialspoint
如果你认为 task 的工作方式类似于 ANT 的 目标,那是对的。 Gradle 任务相当于 ANT 目标。
您可以通过指定 doLast 语句的快捷方式(表示符号 <<)来简化此 hello 任务。 如果您将此快捷方式添加到上述任务 hello,它将类似于以下脚本 −
task hello << { println 'tutorialspoint' }
现在,您可以使用 gradle –q hello 命令执行上述脚本。
Grade脚本主要使用两个真实的Object,一个是Project Object,另一个是Script Object。
项目对象 − 每个脚本描述一个或多个项目。 在执行过程中,此脚本配置项目对象。 您可以在构建脚本中执行一些方法并使用属性,这些方法委托给项目对象。
脚本对象 − Gradle 将脚本代码放入类中,类实现脚本接口,然后执行。 这意味着脚本接口声明的所有属性和方法在您的脚本中都可用。
下表定义了标准项目属性的列表。 所有这些属性都在您的构建脚本中可用。
Sr. No. | 名称 | 类型 | 默认值 |
---|---|---|---|
1 | project | Project | 项目实例 |
2 | name | String | 项目目录的名称。 |
3 | path | String | 项目的绝对路径。 |
4 | description | String | 项目描述。 |
5 | projectDir | File | 包含构建脚本的目录。 |
6 | buildDir | File | 项目目录/构建 |
7 | group | Object | 未指定 |
8 | version | Object | 未指定 |
9 | ant | AntBuilder | 一个 AntBuilder 实例 |
Groovy 基础知识
Gradle 构建脚本使用完整的 Groovy API。
作为一家初创公司,请看以下示例。
示例 1
这个例子解释了如何将字符串转换为大写。
将下面给出的代码复制并保存到 build.gradle 文件中。
task upper << { String expString = 'TUTORIALS point' println "Original: " + expString println "Upper case: " + expString.toUpperCase() }
在命令提示符下执行以下命令。 它执行上面给定的脚本。 您应该执行此操作,存储 build.gradle 文件的位置。
C:\> gradle –q upper
输出
Original: TUTORIALS point Upper case: TUTORIALS POINT
示例 2
以下示例说明了将隐式参数 ($it) 的值打印 4 次
将以下代码复制并保存到 build.gradle 文件中。
task count << { 4.times { print "$it " } }
在命令提示符下执行以下命令。 它执行上述脚本。 你应该执行这个,存储 build.gradle 文件的地方。
$ gradle –q count
输出
这会产生以下输出 −
0 1 2 3
Groovy 的特点
Groovy 语言提供了很多功能。 下面讨论一些重要的特性 −
Groovy JDK 方法
Groovy 为标准 Java 类添加了许多有用的方法。 例如,来自 JDK 的 Iterable API 实现了一个 each() 方法,该方法对 Iterable 接口的元素进行迭代。
将以下代码复制并保存到 build.gradle 文件中。
task groovyJDK << { String myName = "Marc"; myName.each() { println "${it}" }; }
在命令提示符下执行以下命令。 它执行上面给定的脚本。 您应该在 build.gradle 文件存储的位置执行此操作。
C:\> gradle –q groovyJDK
输出
当你执行上面的代码时,你应该会看到如下输出 −
M a r c
属性访问器
您可以通过指定其引用来自动访问特定属性的适当 getter 和 setter 方法。
以下片段定义了属性 buildDir 的 getter 和 setter 方法的语法。
// Using a getter method println project.buildDir println getProject().getBuildDir() // Using a setter method project.buildDir = 'target' getProject().setBuildDir('target')
方法调用的可选括号
Groovy 在方法调用中包含一个特殊功能,即括号对于方法调用是可选的。 此功能也适用于 Gradle 脚本。
看看下面的语法。 它定义了一个调用 test 对象的 systemProperty 的方法。
test.systemProperty 'some.prop', 'value' test.systemProperty('some.prop', 'value')
闭包作为最后一个参数
Gradle DSL 在很多地方都使用了闭包,其中方法的最后一个参数是闭包。 您可以在方法调用之后放置闭包。
以下代码片段定义了闭包用作 repositories() 方法参数的语法。
repositories { println "in a closure" } repositories() { println "in a closure" } repositories({ println "in a closure" })
默认导入
Gradle 会自动将一组导入语句添加到 Gradle 脚本中。 以下列表显示了 Gradle 脚本的默认导入包。
Gradle 脚本的默认导入包如下所示 −
import org.gradle.*
import org.gradle.api.*
import org.gradle.api.artifacts.*
import org.gradle.api.artifacts.cache.*
import org.gradle.api.artifacts.component.*
import org.gradle.api.artifacts.dsl.*
import org.gradle.api.artifacts.ivy.*
import org.gradle.api.artifacts.maven.*
import org.gradle.api.artifacts.query.*
import org.gradle.api.artifacts.repositories.*
import org.gradle.api.artifacts.result.*
import org.gradle.api.component.*
import org.gradle.api.credentials.*
import org.gradle.api.distribution.*
import org.gradle.api.distribution.plugins.*
import org.gradle.api.dsl.*
import org.gradle.api.execution.*
import org.gradle.api.file.*
import org.gradle.api.initialization.*
import org.gradle.api.initialization.dsl.*
import org.gradle.api.invocation.*
import org.gradle.api.java.archives.*
import org.gradle.api.logging.*
import org.gradle.api.plugins.*
import org.gradle.api.plugins.announce.*
import org.gradle.api.plugins.antlr.*
import org.gradle.api.plugins.buildcomparison.gradle.*
import org.gradle.api.plugins.jetty.*
import org.gradle.api.plugins.osgi.*
import org.gradle.api.plugins.quality.*
import org.gradle.api.plugins.scala.*
import org.gradle.api.plugins.sonar.*
import org.gradle.api.plugins.sonar.model.*
import org.gradle.api.publish.*
import org.gradle.api.publish.ivy.*
import org.gradle.api.publish.ivy.plugins.*
import org.gradle.api.publish.ivy.tasks.*
import org.gradle.api.publish.maven.*
import org.gradle.api.publish.maven.plugins.*
import org.gradle.api.publish.maven.tasks.*
import org.gradle.api.publish.plugins.*
import org.gradle.api.reporting.*
import org.gradle.api.reporting.components.*
import org.gradle.api.reporting.dependencies.*
import org.gradle.api.reporting.model.*
import org.gradle.api.reporting.plugins.*
import org.gradle.api.resources.*
import org.gradle.api.specs.*
import org.gradle.api.tasks.*
import org.gradle.api.tasks.ant.*
import org.gradle.api.tasks.application.*
import org.gradle.api.tasks.bundling.*
import org.gradle.api.tasks.compile.*
import org.gradle.api.tasks.diagnostics.*
import org.gradle.api.tasks.incremental.*
import org.gradle.api.tasks.javadoc.*
import org.gradle.api.tasks.scala.*
import org.gradle.api.tasks.testing.*
import org.gradle.api.tasks.testing.junit.*
import org.gradle.api.tasks.testing.testng.*
import org.gradle.api.tasks.util.*
import org.gradle.api.tasks.wrapper.*
import org.gradle.authentication.*
import org.gradle.authentication.http.*
import org.gradle.buildinit.plugins.*
import org.gradle.buildinit.tasks.*
import org.gradle.external.javadoc.*
import org.gradle.ide.cdt.*
import org.gradle.ide.cdt.tasks.*
import org.gradle.ide.visualstudio.*
import org.gradle.ide.visualstudio.plugins.*
import org.gradle.ide.visualstudio.tasks.*
import org.gradle.ivy.*
import org.gradle.jvm.*
import org.gradle.jvm.application.scripts.*
import org.gradle.jvm.application.tasks.*
import org.gradle.jvm.platform.*
import org.gradle.jvm.plugins.*
import org.gradle.jvm.tasks.*
import org.gradle.jvm.tasks.api.*
import org.gradle.jvm.test.*
import org.gradle.jvm.toolchain.*
import org.gradle.language.assembler.*
import org.gradle.language.assembler.plugins.*
import org.gradle.language.assembler.tasks.*
import org.gradle.language.base.*
import org.gradle.language.base.artifact.*
import org.gradle.language.base.plugins.*
import org.gradle.language.base.sources.*
import org.gradle.language.c.*
import org.gradle.language.c.plugins.*
import org.gradle.language.c.tasks.*
import org.gradle.language.coffeescript.*
import org.gradle.language.cpp.*
import org.gradle.language.cpp.plugins.*
import org.gradle.language.cpp.tasks.*
import org.gradle.language.java.*
import org.gradle.language.java.artifact.*
import org.gradle.language.java.plugins.*
import org.gradle.language.java.tasks.*
import org.gradle.language.javascript.*
import org.gradle.language.jvm.*
import org.gradle.language.jvm.plugins.*
import org.gradle.language.jvm.tasks.*
import org.gradle.language.nativeplatform.*
import org.gradle.language.nativeplatform.tasks.*
import org.gradle.language.objectivec.*
import org.gradle.language.objectivec.plugins.*
import org.gradle.language.objectivec.tasks.*
import org.gradle.language.objectivecpp.*
import org.gradle.language.objectivecpp.plugins.*
import org.gradle.language.objectivecpp.tasks.*
import org.gradle.language.rc.*
import org.gradle.language.rc.plugins.*
import org.gradle.language.rc.tasks.*
import org.gradle.language.routes.*
import org.gradle.language.scala.*
import org.gradle.language.scala.plugins.*
import org.gradle.language.scala.tasks.*
import org.gradle.language.scala.toolchain.*
import org.gradle.language.twirl.*
import org.gradle.maven.*
import org.gradle.model.*
import org.gradle.nativeplatform.*
import org.gradle.nativeplatform.platform.*
import org.gradle.nativeplatform.plugins.*
import org.gradle.nativeplatform.tasks.*
import org.gradle.nativeplatform.test.*
import org.gradle.nativeplatform.test.cunit.*
import org.gradle.nativeplatform.test.cunit.plugins.*
import org.gradle.nativeplatform.test.cunit.tasks.*
import org.gradle.nativeplatform.test.googletest.*
import org.gradle.nativeplatform.test.googletest.plugins.*
import org.gradle.nativeplatform.test.plugins.*
import org.gradle.nativeplatform.test.tasks.*
import org.gradle.nativeplatform.toolchain.*
import org.gradle.nativeplatform.toolchain.plugins.*
import org.gradle.platform.base.*
import org.gradle.platform.base.binary
import org.gradle.platform.base.component.*
import org.gradle.platform.base.plugins.*
import org.gradle.platform.base.test.*
import org.gradle.play.*
import org.gradle.play.distribution.*
import org.gradle.play.platform.*
import org.gradle.play.plugins.*
import org.gradle.play.tasks.*
import org.gradle.play.toolchain.*
import org.gradle.plugin.use.*
import org.gradle.plugins.ear.*
import org.gradle.plugins.ear.descriptor.*
import org.gradle.plugins.ide.api.*
import org.gradle.plugins.ide.eclipse.*
import org.gradle.plugins.ide.idea.*
import org.gradle.plugins.javascript.base.*
import org.gradle.plugins.javascript.coffeescript.*
import org.gradle.plugins.javascript.envjs.*
import org.gradle.plugins.javascript.envjs.browser.*
import org.gradle.plugins.javascript.envjs.http.*
import org.gradle.plugins.javascript.envjs.http.simple.*
import org.gradle.plugins.javascript.jshint.*
import org.gradle.plugins.javascript.rhino.*
import org.gradle.plugins.javascript.rhino.worker.*
import org.gradle.plugins.signing.*
import org.gradle.plugins.signing.signatory.*
import org.gradle.plugins.signing.signatory.pgp.*
import org.gradle.plugins.signing.type.*
import org.gradle.plugins.signing.type.pgp.*
import org.gradle.process.*
import org.gradle.sonar.runner.*
import org.gradle.sonar.runner.plugins.*
import org.gradle.sonar.runner.tasks.*
import org.gradle.testing.jacoco.plugins.*
import org.gradle.testing.jacoco.tasks.*
import org.gradle.testkit.runner.*
import org.gradle.util.*