原文地址 http://www.gradle.org/docs/current/userguide/writing_build_scripts.html
13.1. The Gradle build language构建语言
Gradle提供了一种“领域专用语言”(domain specific language) 或者 DSL对构建进行描述。这种语言基于Groovy,并加入了其他特性使得描述更简单。
在第七章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的成员一样了,那就必须使用工程名进行界定了。
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 |
|
group |
Object |
unspecified |
version |
Object |
unspecified |
ant |
AntBuilder |
An AntBuilder instance |
脚本执行的时候Gradle会把它编译进实现了 Script
接口的一个类中,这样接口中的属性和方法都能直接使用了。
可是声明两种变量:局部变量和额外属性。
使用 def
关键字声明局部变量,它们只能在声明域中访问。局部变量在Groovy中就有。
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
.
Groovy提供了大量特性来创建DSL,Gradle就利用了这一点。
Groovy给JVM类增加了大量好用的方法。比如 Iterable
有一个 each
方法,可以迭代访问元素:
Groovy会自动给属性增加 getter或 setter 方法.
方法的括号在调用时不需要写
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)
Gradle DSL随处使用闭包,闭包的概念见here。如果方法的最后一个参数是闭包,则可以把闭包后置 :
相关推荐
- **Kotlin DSL支持**:3.2.0版本进一步加强了对Kotlin DSL的支持,使得构建脚本可以用Kotlin语言编写,提高可读性和可维护性。 - **Android资源裁剪优化**:此版本优化了资源处理,减少了未使用的资源,从而减小...
- **灵活性**:通过Groovy语言编写构建脚本,使得构建过程更加灵活,能够更好地适应复杂的构建需求。 #### 二、构建工具的概念与演变 构建工具的核心任务是根据给定的指令和规则,将源代码转化为最终的产品。这一...
在构建现代化的Java应用时,Spring Boot框架与Gradle构建工具的组合是常见的选择。本资源包"使用Gradle构建Spring Boot工程系列项目源码"是针对一系列教程的配套源代码,旨在帮助开发者深入理解如何利用Gradle有效地...
1. **基于Groovy的DSL(领域特定语言)**:Gradle的构建脚本是用Groovy编写的,这是一种动态、灵活的编程语言,相比传统的XML配置更易读、更易写。 2. **灵活性**:Gradle允许自定义构建逻辑,同时支持多种构建模型...
5. **Groovy DSL**:Gradle的构建脚本基于Groovy,这是一种动态类型的语言,提供了简洁的语法和强大的元编程能力,使构建脚本编写更易读易写。 6. **命令行接口**:Gradle提供了强大的命令行工具,用户可以通过...
5. **灵活的构建脚本**:Gradle使用Groovy或Kotlin DSL编写构建脚本,提供了高度可读性和可扩展性。这使得开发者可以根据项目需求定制构建逻辑。 6. **缓存机制**:Gradle缓存构建结果和依赖,避免重复工作,节省...
通过集成Android Studio,开发者可以轻松地管理Gradle构建脚本(build.gradle)和项目级配置(settings.gradle)。 3. **Gradle插件**:Gradle支持自定义插件,比如Android插件,用于处理Android特有的构建任务,如...
3. **Groovy DSL的改进**:Gradle的Groovy DSL得到了增强,使得构建脚本编写更加直观和简洁。 4. **插件系统**:Gradle的插件系统在此版本中得到了优化,增强了插件的可重用性和可组合性。 ### 共享特性 无论是...
1. **声明式构建**:Gradle 的核心特性之一是其基于Groovy的声明式构建脚本,使得构建逻辑清晰易读。在`build.gradle`文件中,你可以定义任务、依赖关系和其他构建规则,这比传统的Ant或Maven更加直观。 2. **插件...
5. **Groovy DSL与Kotlin DSL**:Gradle的构建脚本可以使用Groovy或Kotlin两种DSL编写。8.0版本可能会对这两种DSL进行改进,提供更好的语法糖或增强类型安全。 6. **命令行界面**:Gradle的命令行界面是与Gradle...
2. **Gradle脚本**:Gradle使用Groovy语法编写构建脚本,这使得脚本具有高度可读性和灵活性。你可以自定义任务、插件和规则,以满足项目的特殊需求。Groovy的动态特性使得Gradle脚本比传统的XML格式更易于理解和维护...
通过研究这个版本的Spring源码和Gradle构建脚本,开发者不仅可以深入了解Spring的工作原理,还能学习如何使用Gradle进行大型项目管理。这对于提升Java开发者的技能和理解开源软件的开发流程都大有裨益。同时,持续...
1. **基于Groovy的DSL**:Gradle使用Groovy语言作为构建脚本的基础,提供了一种简洁、面向对象的语法,使得构建脚本易于阅读和编写,同时具备动态语言的灵活性。 2. **依赖管理**:Gradle的依赖管理系统能够自动...
1. **领域特定语言(DSL)**:Gradle 使用Groovy或Kotlin作为构建脚本的语言,使得构建脚本易于阅读和编写。 2. **依赖管理**:Gradle 支持自动下载和管理项目依赖,确保所有依赖项都是最新和正确的版本。 3. **并行...
- **基于Groovy的DSL**:Gradle的构建脚本使用Groovy语言编写,使得脚本更加简洁易读,且具有动态语言的灵活性。 - **面向任务的构建**:Gradle的核心是任务,每个任务负责完成特定的工作,如编译、打包等。任务...
1. **基于DSL的构建脚本**:Gradle使用Groovy方言作为其构建脚本语言,使得构建配置更加简洁易读。例如,你可以通过`dependencies`块来管理项目的依赖关系。 2. **项目和任务**:Gradle的构建是以项目为单位,每个...
5. **Groovy DSL和Kotlin DSL**:Gradle的构建脚本可以用Groovy或Kotlin编写。Groovy DSL是早期的主要选择,而Kotlin DSL自4.x版本开始逐渐受到重视,提供了更现代、类型安全的构建脚本体验。 6. **Task图形化**:...
1. **Groovy DSL**:Gradle的构建脚本使用Groovy编写,这是一种动态类型的JVM语言,语法简洁且富有表达力。这使得构建配置变得更加直观,减少了构建脚本的复杂性。 2. **依赖管理**:Gradle的依赖管理系统能够自动...
Gradle 是一个强大的构建自动化工具,广泛用于Java、Android和其他多语言项目。Gradle 的6.8.2版本是该工具的一个稳定版本,提供了一系列改进和优化,旨在提高开发效率和构建性能。在这个版本中,我们可以关注以下几...
3. **领域特定语言(DSL)**:Gradle使用Groovy编写构建脚本,这种动态语言的语法简洁,使得脚本更易于理解和维护。此外,Gradle还支持Kotlin DSL,为开发者提供了更现代的编程体验。 4. **缓存机制**:Gradle能够...