Gradle学习(十三)——构建脚本详解
2018-01-05 15:58
309 查看
转载请注明出处:http://blog.csdn.net/lastsweetop/article/details/78982312
你在构建脚本中调用的任何未定义的方法,都会被委托给这个Project对象
你在构建脚本中使用的任何未定义的属性,也是被委托给这个Project对象
我们试着访问下这个Project的name属性:
然后执行一下check任务
两个println语句打印出了相同的属性。第一个因为属性未定义,就会自动委托给Project对象。第二个是用了任何脚本都可见的project对象,其实和第一种也一样都是委托给了Project对象,然后返回了自己。如果你已经定义了Project对象相同名字的属性,如果你还想使用Project对象属性,只能通过project对象了,也就是第二种方法。
然后执行printExtProperties任务:
首先通过ext块给Project对象增加了两个属性,然后通过ext.purpose给每个sourceSet增加了purpose属性,一旦属性被添加,那么他们就可以像之前的属性一样被使用。
给对象添加的额外属性可以从任何可以访问到该对象的地方进行访问,当然子工程也可以访问root工程的属性。
然后执行configure任务:
pos.gradle文件如下:
然后执行configure2任务:
Gradle的构建语言
Gradle使用DSL来描述构建,是基于Grooy并在之上进行了扩展,以便更易于描述构建。Gradle可以支持Groovy除了label外的任何元素,脚本文件需要是UTF-8编码的Project的Api
我们之前说过在Grale中是构建脚本定义了Project的构建,每个处于构建的Project,Gradle都定义了一个Project类型的对象,而构建脚本的执行就是在配置这个Project对象你在构建脚本中调用的任何未定义的方法,都会被委托给这个Project对象
你在构建脚本中使用的任何未定义的属性,也是被委托给这个Project对象
我们试着访问下这个Project的name属性:
println name println project.name
然后执行一下check任务
± % gradle check -q writingBuildScripts writingBuildScripts
两个println语句打印出了相同的属性。第一个因为属性未定义,就会自动委托给Project对象。第二个是用了任何脚本都可见的project对象,其实和第一种也一样都是委托给了Project对象,然后返回了自己。如果你已经定义了Project对象相同名字的属性,如果你还想使用Project对象属性,只能通过project对象了,也就是第二种方法。
标准的project属性
Project对象提供了一套标准的project属性,它们对于构建脚本来说都是可见的,以下是经常使用的Project属性的列表:名字 | 类型 | 默认值 |
---|---|---|
project | Project | Project对象 |
name | String | Project目录的名字 |
path | String | Project的绝对路径 |
description | String | Project的描述 |
projectDir | File | 包含构建脚本的目录 |
buildDir | File | projectDir/build |
group | Object | unspecified |
version | Object | unspecified |
ant | AntBuilder | AntBuilder对象 |
Script的API
当Gradle运行构建脚本的时候,会把它先编译成实现了实现了org.gradle.api.Sript接口的类,这就意味着Script接口的所有属性可方法在构建脚本中都是可用的。声明变量
有两种变量可用声明,一直是本地变量,还有一种是扩展属性。本地变量
本地变量是Groovy的一个特性,按照Groovy的方法写就可以了。def或者特定的class开头,示例:def dest = 'dest' task copy(type:Copy) { from "source" into dest }
扩展属性
在Gradle领域模型内的各种扩展对象,都可以使用用户定义的扩展属性,包括并不局限于projects,tasks,和source sets。扩展属性可以通过ext添加,读取或者设置。ext代码块可以一次添加多个扩展属性。示例:ext { pluginVersion = "2.0" url = "www.lastsweetop.com" } sourceSets.all { ext.perpose = null } sourceSets { main { perpose = 'main' } test { perpose = 'test' } plugin { perpose = 'production' } } task printExtProperties { doLast { println pluginVersion println url sourceSets.matching { it.perpose == 'production' }.each { println it.name } } }
然后执行printExtProperties任务:
± % gradle printExtProperties -q a writingBuildScripts 2.0 www.lastsweetop.com plugin
首先通过ext块给Project对象增加了两个属性,然后通过ext.purpose给每个sourceSet增加了purpose属性,一旦属性被添加,那么他们就可以像之前的属性一样被使用。
给对象添加的额外属性可以从任何可以访问到该对象的地方进行访问,当然子工程也可以访问root工程的属性。
配置任意对象
你可以使用下面这样可读性很好的方式去配置任意对象:task configure { doLast { def pos = configure(new java.text.FieldPosition(10)) { beginIndex = 2 endIndex = 3 } println pos.beginIndex println pos.endIndex } }
然后执行configure任务:
± % gradle configure -q 2 3
使用额外的脚本配置任意对象
示例:task configure2 { doLast { def pos = new java.text.FieldPosition(10) apply from: 'pos.gradle', to: pos println pos.beginIndex println pos.endIndex } }
pos.gradle文件如下:
beginIndex = 2 endIndex = 3
然后执行configure2任务:
± % gradle configure2 -q 2 3
默认导入包
下面这些包被默认导入到所有脚本中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.artifacts.transform.* import org.gradle.api.artifacts.type.* import org.gradle.api.attributes.* 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.logging.configuration.* import org.gradle.api.model.* 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.osgi.* import org.gradle.api.plugins.quality.* import org.gradle.api.plugins.scala.* import org.gradle.api.provider.* 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.publish.tasks.* import org.gradle.api.reflect.* import org.gradle.api.reporting.* import org.gradle.api.reporting.components.* import org.gradle.api.reporting.dependencies.* import org.gradle.api.reporting.dependents.* 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.aws.* import org.gradle.authentication.http.* import org.gradle.buildinit.plugins.* import org.gradle.buildinit.tasks.* import org.gradle.caching.* import org.gradle.caching.configuration.* import org.gradle.caching.http.* import org.gradle.caching.local.* import org.gradle.concurrent.* import org.gradle.external.javadoc.* import org.gradle.ide.visualstudio.* import org.gradle.ide.visualstudio.plugins.* import org.gradle.ide.visualstudio.tasks.* import org.gradle.ide.xcode.* import org.gradle.ide.xcode.plugins.* import org.gradle.ide.xcode.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.compile.* 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.swift.* import org.gradle.language.swift.plugins.* import org.gradle.language.swift.tasks.* 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.cpp.* import org.gradle.nativeplatform.test.cpp.plugins.* 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.test.xctest.* import org.gradle.nativeplatform.test.xctest.plugins.* import org.gradle.nativeplatform.test.xctest.tasks.* import org.gradle.nativeplatform.toolchain.* import org.gradle.nativeplatform.toolchain.plugins.* import org.gradle.normalization.* 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.play.* import org.gradle.play.distribution.* import org.gradle.play.platform.* import org.gradle.play.plugins.* import org.gradle.play.plugins.ide.* import org.gradle.play.tasks.* import org.gradle.play.toolchain.* import org.gradle.plugin.devel.* import org.gradle.plugin.devel.plugins.* import org.gradle.plugin.devel.tasks.* import org.gradle.plugin.management.* 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.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.testing.base.* import org.gradle.testing.base.plugins.* import org.gradle.testing.jacoco.plugins.* import org.gradle.testing.jacoco.tasks.* import org.gradle.testing.jacoco.tasks.rules.* import org.gradle.testkit.runner.* import org.gradle.vcs.* import org.gradle.vcs.git.* import org.gradle.workers.*
相关文章推荐
- Gradle学习(十一)——构建脚本基础知识
- Gradle学习(二十)——多项目构建详解
- gradle学习(11)-编写构建脚本
- 【转载】Gradle学习 第六章:构建脚本基础
- Gradle学习笔记(二)构建脚本
- linux shell 脚本攻略学习10--生成任意大小的文件和文本文件的交集与差集详解
- Gradle构建脚本基础
- Gradle学习-构建Java程序一
- Gradle学习(七)——持续构建
- Spring Framework5.0 学习(1)—— 用Gradle构建一个Java Project
- Gradle学习系列之八——构建多个Project
- linux shell 脚本攻略学习5---find命令详解
- Gradle学习教程之部署上传项目详解
- Shell脚本学习之sed详解
- JMeter学习—006—JMeter 命令行(非GUI模式)详解(一)-分布式(远程)执行脚本及查看指定结果、日志
- linux shell 脚本攻略学习7---tr命令详解
- Gradle学习(四) web工程构建
- Gradle第十三章:编写构建脚本
- Gradle 构建脚本
- Gradle:构建脚本概要