`
somefuture
  • 浏览: 1089058 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

翻译:Gradle之构建脚本编写

阅读更多

原文地址 http://www.gradle.org/docs/current/userguide/writing_build_scripts.html

13.1. The Gradle build language构建语言

Gradle提供了一种“领域专用语言”(domain specific language) 或者 DSL对构建进行描述。这种语言基于Groovy,并加入了其他特性使得描述更简单。

13.2. The Project API

在第七章Chapter 7, Java Quickstart 我们以apply() 方法为例做了描述。咦,这个方法哪来的?当时我们说脚本定义了工程,对于每一个工程Gradle会创建一个 Project 型的实例并将该对象实例和构建脚本进行关联。当构建脚本执行时会配置这个对象:

Getting help writing build scripts

嗨嗨别忘了构建脚本是Groovy代码,用的是Gradle API。而Project 接口就是你最先要了解的访问Gradle API的工具。所以要了解什么标签可用,就得去看Project 接口的文档.

  • 脚本中调用的任何方法如果在基本中无定义,都委托给Project对象。

  • 属性的访问同上。

咱们试着访问name属性看看 。

Example 13.1. Accessing property of the Project object

build.gradle

println name
println project.name

Output of gradle -q check

> gradle -q check
projectApi
projectApi

哇唔,俩println 语句都打出了同一个属性。前者是自动委托了Project对象,对于没在脚本里定义的属性施行。后者使用了工程命来关联Project对象。 如果你定义的属性和Project的成员一样了,那就必须使用工程名进行界定了。

13.2.1. Standard project properties标准属性

Project对象提供了几个标准属性,下面列出了一些常用的:

Table 13.1. Project Properties

Name Type Default 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
group Object unspecified
version Object unspecified
ant AntBuilder An AntBuilder instance

13.3. The Script API

脚本执行的时候Gradle会把它编译进实现了 Script接口的一个类中,这样接口中的属性和方法都能直接使用了。

13.4. Declaring variables声明变量

可是声明两种变量:局部变量和额外属性。

13.4.1. Local variables局部变量

使用 def 关键字声明局部变量,它们只能在声明域中访问。局部变量在Groovy中就有。

Example 13.2. Using local variables

build.gradle

def dest = "dest"

task copy(type: Copy) {
    from "source"
    into dest
}

13.4.2. Extra properties额外属性

Gradle域模型中的增强对象都有额外的用户定义属性。这包括但不限于工程、任务、资源集等。通过ext属性可以增加、读取、改变额外属性。也可以使用ext块增加多个额外属性。

Example 13.3. Using extra properties

build.gradle

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 }
}

Output of gradle -q printProperties

> gradle -q printProperties
3.1.0.RELEASE
build@master.org
main
plugin

上例中用 ext 块增加了两个额外属性。另外通过设置ext.purpose为null为每个资源集增加了purpose属性。一旦属性被增加就可以像预定义属性一样访问。

通过要求严格语法,Gradle会在尝试访问不存在是属性命时立即失败。额外属性可以从任何域访问,父工程的额外属性也能被子工程访问。

更多关于额外属性访问: ExtraPropertiesExtension.

13.5. Some Groovy basics 基本Groovy入门

Groovy提供了大量特性来创建DSL,Gradle就利用了这一点。

13.5.1. Groovy JDK

Groovy给JVM类增加了大量好用的方法。比如 Iterable 有一个 each 方法,可以迭代访问元素:

Example 13.4. Groovy JDK methods

build.gradle

// Iterable gets an each() method
configurations.runtime.each { File f -> println f }

详细请看 http://groovy.codehaus.org/groovy-jdk/ 

13.5.2. Property accessors属性访问符

Groovy会自动给属性增加 getter或 setter 方法.

Example 13.5. Property accessors

build.gradle

// Using a getter method
println project.buildDir
println getProject().getBuildDir()

// Using a setter method
project.buildDir = 'target'
getProject().setBuildDir('target')

13.5.3. Optional parentheses on method calls括号可有可无

方法的括号在调用时不需要写

Example 13.6. Method call without parentheses

build.gradle

test.systemProperty 'some.prop', 'value'
test.systemProperty('some.prop', 'value')

13.5.4. List and map literals迭代

Groovy提供了定义 List 和Map的快捷方法:

Example 13.7. List and map literals

build.gradle

// 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
apply plugin: 'java'

Map<String, String> map = new HashMap<String, String>()
map.put('plugin', 'java')
apply(map)

13.5.5. Closures as the last parameter in a method闭包作末参数

Gradle DSL随处使用闭包,闭包的概念见here。如果方法的最后一个参数是闭包,则可以把闭包后置 :

Example 13.8. Closure as method parameter

build.gradle

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

13.5.6. Closure delegate闭包委托

每个闭包都有一个delegate 对象,Groovy使用它来查找闭包的非局部变量和引用。Gradle以此来配置闭包,给闭包添加delegate对象。

Example 13.9. Closure delegates

build.gradle

dependencies {
    assert delegate == project.dependencies
    compile('junit:junit:4.11')
    delegate.compile('junit:junit:4.11')
}

 

 

分享到:
评论

相关推荐

    com.android.tools.build:gradle:3.2.0

    - **Kotlin DSL支持**:3.2.0版本进一步加强了对Kotlin DSL的支持,使得构建脚本可以用Kotlin语言编写,提高可读性和可维护性。 - **Android资源裁剪优化**:此版本优化了资源处理,减少了未使用的资源,从而减小...

    深入理解Android(一):Gradle详解

    - **灵活性**:通过Groovy语言编写构建脚本,使得构建过程更加灵活,能够更好地适应复杂的构建需求。 #### 二、构建工具的概念与演变 构建工具的核心任务是根据给定的指令和规则,将源代码转化为最终的产品。这一...

    使用Gradle 构建spring Boot工程系列项目源码(配合第五篇文章)

    在构建现代化的Java应用时,Spring Boot框架与Gradle构建工具的组合是常见的选择。本资源包"使用Gradle构建Spring Boot工程系列项目源码"是针对一系列教程的配套源代码,旨在帮助开发者深入理解如何利用Gradle有效地...

    gradle2.6-2.8

    1. **基于Groovy的DSL(领域特定语言)**:Gradle的构建脚本是用Groovy编写的,这是一种动态、灵活的编程语言,相比传统的XML配置更易读、更易写。 2. **灵活性**:Gradle允许自定义构建逻辑,同时支持多种构建模型...

    gradle-2.14-all.zip

    5. **Groovy DSL**:Gradle的构建脚本基于Groovy,这是一种动态类型的语言,提供了简洁的语法和强大的元编程能力,使构建脚本编写更易读易写。 6. **命令行接口**:Gradle提供了强大的命令行工具,用户可以通过...

    gradle-4.1-all.zip 离线包下载 需要下载

    5. **灵活的构建脚本**:Gradle使用Groovy或Kotlin DSL编写构建脚本,提供了高度可读性和可扩展性。这使得开发者可以根据项目需求定制构建逻辑。 6. **缓存机制**:Gradle缓存构建结果和依赖,避免重复工作,节省...

    gradle-7.5-all.zip压缩包

    通过集成Android Studio,开发者可以轻松地管理Gradle构建脚本(build.gradle)和项目级配置(settings.gradle)。 3. **Gradle插件**:Gradle支持自定义插件,比如Android插件,用于处理Android特有的构建任务,如...

    gradle 构建工具.zip

    3. **Groovy DSL的改进**:Gradle的Groovy DSL得到了增强,使得构建脚本编写更加直观和简洁。 4. **插件系统**:Gradle的插件系统在此版本中得到了优化,增强了插件的可重用性和可组合性。 ### 共享特性 无论是...

    gradle-1.6.zip

    1. **声明式构建**:Gradle 的核心特性之一是其基于Groovy的声明式构建脚本,使得构建逻辑清晰易读。在`build.gradle`文件中,你可以定义任务、依赖关系和其他构建规则,这比传统的Ant或Maven更加直观。 2. **插件...

    gradle-8.0-bin.zip

    5. **Groovy DSL与Kotlin DSL**:Gradle的构建脚本可以使用Groovy或Kotlin两种DSL编写。8.0版本可能会对这两种DSL进行改进,提供更好的语法糖或增强类型安全。 6. **命令行界面**:Gradle的命令行界面是与Gradle...

    gradle构建

    2. **Gradle脚本**:Gradle使用Groovy语法编写构建脚本,这使得脚本具有高度可读性和灵活性。你可以自定义任务、插件和规则,以满足项目的特殊需求。Groovy的动态特性使得Gradle脚本比传统的XML格式更易于理解和维护...

    github最新版spring源码gradle构建20141121

    通过研究这个版本的Spring源码和Gradle构建脚本,开发者不仅可以深入了解Spring的工作原理,还能学习如何使用Gradle进行大型项目管理。这对于提升Java开发者的技能和理解开源软件的开发流程都大有裨益。同时,持续...

    gradle-7.2-bin.zip

    1. **领域特定语言(DSL)**:Gradle 使用Groovy或Kotlin作为构建脚本的语言,使得构建脚本易于阅读和编写。 2. **依赖管理**:Gradle 支持自动下载和管理项目依赖,确保所有依赖项都是最新和正确的版本。 3. **并行...

    基于gradle构建的项目

    - **基于Groovy的DSL**:Gradle的构建脚本使用Groovy语言编写,使得脚本更加简洁易读,且具有动态语言的灵活性。 - **面向任务的构建**:Gradle的核心是任务,每个任务负责完成特定的工作,如编译、打包等。任务...

    Gradle资料 java构建项目

    1. **基于DSL的构建脚本**:Gradle使用Groovy方言作为其构建脚本语言,使得构建配置更加简洁易读。例如,你可以通过`dependencies`块来管理项目的依赖关系。 2. **项目和任务**:Gradle的构建是以项目为单位,每个...

    gradle-8.5-all

    1. **基于Groovy的DSL**:Gradle使用Groovy语言作为构建脚本的基础,提供了一种简洁、面向对象的语法,使得构建脚本易于阅读和编写,同时具备动态语言的灵活性。 2. **依赖管理**:Gradle的依赖管理系统能够自动...

    gradle-4.7-all.zip

    5. **Groovy DSL和Kotlin DSL**:Gradle的构建脚本可以用Groovy或Kotlin编写。Groovy DSL是早期的主要选择,而Kotlin DSL自4.x版本开始逐渐受到重视,提供了更现代、类型安全的构建脚本体验。 6. **Task图形化**:...

    gradle-4.6

    1. **Groovy DSL**:Gradle的构建脚本使用Groovy编写,这是一种动态类型的JVM语言,语法简洁且富有表达力。这使得构建配置变得更加直观,减少了构建脚本的复杂性。 2. **依赖管理**:Gradle的依赖管理系统能够自动...

    gradle-6.8.2-all.zip

    Gradle 是一个强大的构建自动化工具,广泛用于Java、Android和其他多语言项目。Gradle 的6.8.2版本是该工具的一个稳定版本,提供了一系列改进和优化,旨在提高开发效率和构建性能。在这个版本中,我们可以关注以下几...

    Gradle-3.5-all.zip及gradle-3.2-bin.zip

    3. **领域特定语言(DSL)**:Gradle使用Groovy编写构建脚本,这种动态语言的语法简洁,使得脚本更易于理解和维护。此外,Gradle还支持Kotlin DSL,为开发者提供了更现代的编程体验。 4. **缓存机制**:Gradle能够...

Global site tag (gtag.js) - Google Analytics