Gradle详解-Chapter 16. Writing Build Scripts

来源:互联网 发布:斗鱼主播qqq的淘宝店是 编辑:程序博客网 时间:2024/05/01 10:18

构建脚本所指就是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 nameprintln project.name

结果:

D:\GradleTest>gradle -q checkname = javaLibproject.name = javaLibname = project1project.name = project1D:\GradleTest>

16.2.1. Standard project properties project 标准属性

NameTypeDefault ValueprojectProjectThe Project instancenameStringThe name of the project directory.pathStringThe absolute path of the project.descriptionStringA description for the project.projectDirFileThe directory containing the build script.buildDirFileprojectDir/buildgroupObjectunspecifiedversionObjectunspecifiedantAntBuilderAn 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 = 3task 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 printProperties3.1.0.RELEASEbuild@master.orgmainplugin

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 configure15

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 = 3endIndex = 5

结果:

D:\GradleTest>gradle -q configure135

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 methodprintln project.buildDirprintln getProject().getBuildDir()// Using a setter methodproject.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 literaltest.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 argumentapply 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.*
0 0