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 的文件。看看下面的例子,它代表一个打印 codingdict 的小脚本。将以下脚本复制并保存到名为 build.gradle 的文件中。该构建脚本定义了一个任务名称hello,用于打印教程点字符串。

task hello {
   doLast {
      println 'CodingDict'
   }
}

在命令提示符下执行以下命令。它执行上面的脚本。您应该执行此操作,其中存储build.gradle文件。

C:\> gradle q hello

如果命令执行成功,您将得到以下输出。

CodingDict

如果您认为任务与ANT的目标类似,那么这就对了 - Gradle任务等同于ANT目标。

您可以通过为 doLast 语句指定一个快捷方式(表示符号 < <)来简化此hello任务。如果将此快捷方式添加到上述任务 招呼 它看起来像下面的脚本。

task hello<< {
   println 'codingdict'
}

您可以使用 gradle -q hello 命令执行上述脚本。

Gradle脚本主要使用两个实体对象; 一个是项目对象,另一个是脚本对象。

项目对象 - 每个脚本描述一个或多个项目。 在执行过程中,该脚本配置项目对象。您可以调用一些方法并在您的构建脚本中使用委托给项目对象的属性。

脚本对象 - Gradle将脚本代码放入类中,这些类实现了脚本接口,然后执行。 这意味着脚本接口声明的所有属性和方法都可以在您的脚本中使用。

下表定义了 标准项目属性 的列表。所有这些属性都可以在您的构建脚本中使用。

老号 名称 类型 默认值
1 项目 项目 项目实例
2 名称 项目目录的名称。
3 路径 项目的绝对路径。
4 描述 项目描述。
PROJECTDIR 文件 包含构建脚本的目录。
6 buildDir 文件 PROJECTDIR /编译
7 目的 不明
8 目的 不明
9 蚂蚁 AntBuilder 一个AntBuilder实例

Gradle如何使用Groovy

Gradle构建脚本使用全长的Groovy API。作为一家创业公司,请看下面的例子。以下示例说明了如何将字符串转换为大写字母。

将以下代码复制并保存到 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

以下示例说明了有关将隐式参数($ it)的值打印4次的说明。

将以下代码复制并保存到 build.gradle 文件中。

task count << {
   4.times {
      print "$it "
   }
}

在命令提示符下执行以下命令。它执行上面给出的脚本。您应该执行此操作,其中存储build.gradle文件。

$ gradle q count

如果命令执行成功,您将得到以下输出。

0 1 2 3

Groovy语言提供了很多功能。以下是一些重要功能。

Groovy JDK方法

Groovy为标准Java类增加了许多有用的方法。例如,来自JDK的Iterable API实现了遍历Iterable接口元素的 each() 方法。

将以下代码复制并保存到 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在很多地方使用闭包。如果方法的最后一个参数是闭包,则可以在方法调用后放置闭包。

以下片段定义了Closures用作存储库()方法参数的语法。

repositories {
   println "in a closure"
}
repositories() {
   println "in a closure"
}
repositories({ println "in a closure" })

Gradle脚本的默认导入

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.*