Gradle 构建脚本
-
构建脚本
Gradle建立了一个脚本文件来处理两件事。一个是项目,另一个是任务。每个Gradle构建都代表一个或多个项目。项目代表JAR库或Web应用程序,或者它可能代表从其他项目产生的JAR组装而成的ZIP。简单来说,一个项目是由不同的任务组成的。任务是指构建执行的一项工作。一个任务可能是编译某些类,创建JAR,生成Javadoc或将一些存档发布到存储库。Gradle使用Groovy语言编写脚本。 -
编写构建脚本
Gradle提供了一种领域特定语言(DSL),用于描述构建。这使用Groovy语言使描述构建更加容易。Gradle的每个构建脚本都是使用UTF-8编码的,离线保存并命名为build.gradle。我们正在使用Groovy脚本描述任务和项目。您可以使用Gradle命令运行Gradle构建。该命令查找名为build.gradle的文件。看下面的示例,该示例代表一个打印scriptspoint的小脚本。将以下脚本复制并保存到名为build.gradle的文件中。该构建脚本定义了任务名称hello,该任务名称用于打印jc2182字符串。task hello { doLast { println 'jc2182' } }
在命令提示符下执行以下命令。它执行上面的脚本。您应该执行此操作,将build.gradle文件存储在其中。C:\> gradle –q hello
输出:jc2182
Gradle脚本主要使用两个实际对象,一个是项目对象,另一个是脚本对象。- 项目对象 - 每个脚本描述一个或多个项目。在执行过程中,此脚本将配置项目对象。您可以在构建脚本中调用委托给Project Object的某些方法并使用属性。
- 脚本对象 - Gradle将脚本代码分成实现脚本接口然后执行的类。这意味着脚本接口声明的所有属性和方法在脚本中都可用。
下表定义了标准项目属性的列表。所有这些属性在您的构建脚本中都可用。名称 类型 默认值 project Project Project 实例 name String 项目目录名称 path String 项目绝对路径 description String 项目描述 projectDir File 构建脚本的目录 buildDir File projectDir/build group Object Unspecified version Object Unspecified ant AntBuilder 一个AntBuilder 实例 -
Groovy基础
Gradle构建脚本使用完整的Groovy API。请看以下示例。以下示例说明有关将字符串转换为大写形式的信息。将以下给定的代码复制并保存到build.gradle文件中。task upper { doLast { String expString = 'Jc2182' println "Original: " + expString println "Upper case: " + expString.toUpperCase() } }
在命令提示符下执行以下命令。它执行上面给定的脚本。您应该执行此操作,将build.gradle文件存储在其中。C:\> gradle –q upper
输出:Original: Jc2182 Upper case: CAINIAOYA
下面的示例说明有关将隐式参数($it)的值打印4次的情况。将以下代码复制并保存到build.gradle文件中。task count { doLast { 4.times { print "$it " } } }
在命令提示符下执行以下命令。它执行上面给定的脚本。您应该执行此操作,将build.gradle文件存储在其中。C:\> gradle –q count
输出:0 1 2 3
Groovy语言提供了许多功能,其中一些重要功能将在下面讨论。 -
Groovy JDK方法
Groovy向标准Java类添加了许多有用的方法。例如,JDK的Iterable API实现了一个each()方法,该方法在Iterable接口的元素上进行迭代。将以下代码复制并保存到build.gradle文件中。task groovyJDK { doLast{ 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在许多地方使用闭包。如果方法的最后一个参数是闭包,则可以将闭包放在方法调用之后。以下代码段定义了Closures用作repositories()方法参数的语法。repositories { println "in a closure" } repositories() { println "in a closure" } repositories({ println "in a closure" })
-
默认导入
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.*