您的位置:首页 > 产品设计 > UI/UE

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

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 标准属性

NameTypeDefault Value
project
Project
The
Project
instance
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
AntBuilder
instance

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.*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gradle android script