Gradle详解-Chapter 16. Writing Build Scripts
2016-06-22 18:01
423 查看
构建脚本所指就是build.gradle文件
Chapter 14 基础脚本构建
Chapter 16. Writing Build Scripts 写脚本
Chapter17. More about Tasks
很容易描述一个gradle
一个gradle包含Groovy的任何元素。Gradle默认脚本的编码为UTF-8
对于每一个项目,Gradle都创建了一个Project的对像将该项目和该对象关联起来
当脚本执行是,它配置该Project对象按照如下规则:
1,你调用的任何方法都没有在脚本中定义,则委托给Project对象。
2,你调用的任何属性都没有在脚本中定义,则委托给Project对象。
eg: 项目名称
结果:
这就意味着,该脚本中有Script接口所声明的所有方法和属性。
16.4.1. Local variables
通过def定义变量: eg: def dest = “dest”
but 执行任何任务都会打印dest,只要你println dest。
16.4.2. Extra properties
新建一个javalib,根目录创建build.gradle。 同时把该项目配置到settings.gradle(工程的根目录)
Gradle中的对象可以自定义自己的属性,包含但不限于projects,tasks和source sets中。
属性添加的2种方式:
1,添加单个属性
设置自定义属性:ext.自定义属性名
调用自定义属性: task.自定义属性名
2,添加多个属性
通过ext代码块(类似static代码块一样)
结果;
格式:taskname(任意已存在对象){对象中的属性} // 有点生搬硬套了
结果:
build.gradle
other.gradle 外部的gradle文件(在同一根目录下)
结果:
16.7.1. Groovy JDK
Groovy添加了很多标准的java类,也就是你可以用java的方法来写脚本
// Iterable gets an each() method
configurations.runtime.each { File f -> println f }
Have a look at http://groovy-lang.org/gdk.html for more details.
16.7.2. Property accessors 属性调用
属性调用通过.调用,相当于getter or setter方法
16.7.3. Optional parentheses on method calls 圆括号()可选可不选
test.systemProperty ‘some.prop’, ‘value’
test.systemProperty(‘some.prop’, ‘value’)
16.7.4. List and map literals list和map迭代
16.7.5. Closures as the last parameter in a method {}闭包作为方法的最后一个参数
闭包的语法及其他用法:here
16.7.5.16.7.6. Closure delegate 关闭委托
16.8. Default imports 默认导包
在每个脚本里面都有的包,导了包就可以只使用类名,否则需要完整的包名。
eg:new org.gradle.api.tasks.StopExecutionException() 可以直接写为 new StopExecutionException()
Listed below are the imports added to each script:
Chapter 14 基础脚本构建
Chapter 16. Writing Build Scripts 写脚本
Chapter17. More about Tasks
Chapter 16. Writing Build Scripts 编写构建脚本
16.1. The Gradle build language
Gradle使用DSL语言描述脚本,该脚本基于Groovy,很容易描述一个gradle
一个gradle包含Groovy的任何元素。Gradle默认脚本的编码为UTF-8
16.2. The Project API project api
我们早期说过,Gradle是通过构建脚本定义了一个项目对于每一个项目,Gradle都创建了一个Project的对像将该项目和该对象关联起来
当脚本执行是,它配置该Project对象按照如下规则:
1,你调用的任何方法都没有在脚本中定义,则委托给Project对象。
2,你调用的任何属性都没有在脚本中定义,则委托给Project对象。
eg: 项目名称
println name println project.name
结果:
D:\GradleTest>gradle -q check name = javaLib project.name = javaLib name = project1 project.name = project1 D:\GradleTest>
16.2.1. Standard project properties project 标准属性
Name | Type | Default Value |
project | Project | The Projectinstance |
name | String | The name of the project directory. |
path | String | The absolute path of the project. |
description | String | A description for the project. |
projectDir | File | The directory containing the build script. |
buildDir | File | projectDir/build[/code] |
group | Object | unspecified |
version | Object | unspecified |
ant | AntBuilder | An AntBuilderinstance |
16.3. The Script API Script API
当Gradle执行一个脚本的时候,该脚本会被编译成一个Class,该类实现Script接口。这就意味着,该脚本中有Script接口所声明的所有方法和属性。
16.4. Declaring variables 声明变量
有两种类型的变量可以在脚本中声明:局部变量和扩展属性16.4.1. Local variables
通过def定义变量: eg: def dest = “dest”
but 执行任何任务都会打印dest,只要你println dest。
//def dest = "dest" def dest = 3 task ss() { println " dest = "+dest; }
16.4.2. Extra properties
新建一个javalib,根目录创建build.gradle。 同时把该项目配置到settings.gradle(工程的根目录)
Gradle中的对象可以自定义自己的属性,包含但不限于projects,tasks和source sets中。
属性添加的2种方式:
1,添加单个属性
设置自定义属性:ext.自定义属性名
调用自定义属性: task.自定义属性名
2,添加多个属性
通过ext代码块(类似static代码块一样)
apply plugin: "java" ext { // 多个属性 springVersion = "3.1.0.RELEASE" emailNotification = "build@master.org" } // 单个属性 sourceSets.all { ext.purpose = null } sourceSets { main { purpose = "production" } test { purpose = "test" } plugin { purpose = "production" } } task printProperties << { println springVersion println emailNotification sourceSets.matching { it.purpose == "production" }.each { println it.name } }
结果;
D:\GradleTest>gradle -q printProperties 3.1.0.RELEASE build@master.org main plugin
16.5. Configuring arbitrary objects 配置任意对象
配置任意已存在对象的的属性格式:taskname(任意已存在对象){对象中的属性} // 有点生搬硬套了
task configure << { def pos = configure(new java.text.FieldPosition(10)) { //私有属性 beginIndex = 1 endIndex = 5 //public 方法 //setBeginIndex(2) //setEndIndex(5) } println pos.beginIndex println pos.endIndex }
结果:
D:\GradleTest>gradle -q configure 1 5
16.6. Configuring arbitrary objects using an external script 通过外部的脚本(其他gradle文件)配置任意对象
build.gradle
task configure1 << { def pos = new java.text.FieldPosition(10) // Apply the script apply from: 'other.gradle', to: pos println pos.beginIndex println pos.endIndex }
other.gradle 外部的gradle文件(在同一根目录下)
// Set properties. beginIndex = 3 endIndex = 5
结果:
D:\GradleTest>gradle -q configure1 3 5
16.7. Some Groovy basics 一些Groovy的基础知识
Gradle是基于Groovy语言的,所以了解Groovy语法对我们写插件和tasks是很有帮助的。16.7.1. Groovy JDK
Groovy添加了很多标准的java类,也就是你可以用java的方法来写脚本
// Iterable gets an each() method
configurations.runtime.each { File f -> println f }
Have a look at http://groovy-lang.org/gdk.html for more details.
16.7.2. Property accessors 属性调用
属性调用通过.调用,相当于getter or setter方法
// Using a getter method println project.buildDir println getProject().getBuildDir() // Using a setter method project.buildDir = 'target' getProject().setBuildDir('target')
16.7.3. Optional parentheses on method calls 圆括号()可选可不选
test.systemProperty ‘some.prop’, ‘value’
test.systemProperty(‘some.prop’, ‘value’)
16.7.4. List and map literals list和map迭代
// List literal test.includes = ['org/gradle/api/**', 'org/gradle/internal/**'] List<String> list = new ArrayList<String>() list.add('org/gradle/api/**') list.add('org/gradle/internal/**') test.includes = list // Map literal. Map<String, String> map = [key1:'value1', key2: 'value2'] // Groovy will coerce named arguments // into a single map argument apply plugin: 'java'
16.7.5. Closures as the last parameter in a method {}闭包作为方法的最后一个参数
闭包的语法及其他用法:here
repositories { println "in a closure" } repositories() { println "in a closure" } repositories({ println "in a closure" })
16.7.5.16.7.6. Closure delegate 关闭委托
dependencies { assert delegate == project.dependencies testCompile('junit:junit:4.12') delegate.testCompile('junit:junit:4.12') }
16.8. Default imports 默认导包
在每个脚本里面都有的包,导了包就可以只使用类名,否则需要完整的包名。
eg:new org.gradle.api.tasks.StopExecutionException() 可以直接写为 new StopExecutionException()
Listed below are the imports added to each script:
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.logging.configuration.* 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.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.repository.* 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.base.* import org.gradle.testing.base.plugins.* import org.gradle.testing.jacoco.plugins.* import org.gradle.testing.jacoco.tasks.* import org.gradle.testkit.runner.* import org.gradle.util.*
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories