Gradle - 构建脚本
Gradle 构建一个脚本文件来处理两件事;一是项目,二是任务。每个 Gradle 构建都代表一个或多个项目。
一个项目代表一个库 JAR 或一个 Web 应用程序,或者它可能代表一个由其他项目生成的 JAR 组装而成的 ZIP。简而言之,一个项目是由不同的任务组成的。
任务意味着构建执行的一项工作。任务可能是编译一些类、创建 JAR、生成 Javadoc 或将一些档案发布到存储库。
Gradle 使用 Groovy 语言编写脚本。
编写构建脚本
Gradle 提供了领域特定语言 (DSL),用于描述构建。它使用 Groovy 语言来更轻松地描述构建。Gradle的每个构建脚本都使用UTF-8编码,离线保存并命名为build.gradle。
构建.gradle
我们使用 Groovy 脚本来描述任务和项目。您可以使用 Gradle 命令运行 Gradle 构建。此命令查找名为 build.gradle 的文件。
看一下下面的示例,它代表一个打印tutorialspoint 的小脚本。
将以下脚本复制并保存到名为build.gradle的文件中。这个构建脚本定义了一个任务名称hello,用于打印tutorialspoint字符串。
task hello { doLast { println 'tutorialspoint' } }
在build.gradle文件所在的命令提示符下执行以下命令。
C:\> gradle –q hello
输出
您将看到以下输出 -
tutorialspoint
如果您认为任务与ANT 的目标类似,那么这是对的。Gradle任务相当于ANT目标。
您可以通过指定doLast语句的快捷方式(表示符号<<)来简化此 hello 任务。如果将此快捷方式添加到上述任务hello中,它将类似于以下脚本 -
task hello << { println 'tutorialspoint' }
现在,您可以使用gradle –q hello命令执行上述脚本。
Grade脚本主要使用两个真实的Object,一个是Project Object,另一个是Script Object。
项目对象- 每个脚本描述一个或多个项目。在执行过程中,该脚本会配置项目对象。您可以在构建脚本中执行一些方法并使用属性,这些方法被委托给项目对象。
脚本对象- Gradle 将脚本代码放入类中,该类实现脚本接口,然后执行它。这意味着脚本接口声明的所有属性和方法在您的脚本中都可用。
下表定义了标准项目属性的列表。所有这些属性都可以在您的构建脚本中使用。
先生。没有。 | 姓名 | 类型 | 默认值 |
---|---|---|---|
1 | 项目 | 项目 | 项目实例 |
2 | 姓名 | 细绳 | 项目目录的名称。 |
3 | 小路 | 细绳 | 项目的绝对路径。 |
4 | 描述 | 细绳 | 项目的描述。 |
5 | 项目目录 | 文件 | 包含构建脚本的目录。 |
6 | 构建目录 | 文件 | 项目目录/构建 |
7 | 团体 | 目的 | 未指定 |
8 | 版本 | 目的 | 未指定 |
9 | 蚂蚁 | 蚂蚁建造者 | 一个 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 脚本。
看看下面的语法。它定义了一个调用测试对象的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.*