`
Adan-Chiu
  • 浏览: 21835 次
社区版块
存档分类
最新评论

Gradle用户所需要了解的Groovy

 
阅读更多
一、groovy介绍
    A multi-faceted language for the Java platform
Apache Groovy is a powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform aimed at improving developer productivity thanks to a concise, familiar and easy to learn syntax. It integrates smoothly with any Java program, and immediately delivers to your application powerful features, including scripting capabilities,Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming.

二、比较java和groovy语法

1.在groovy中可以编写更少代码的同时更高效地工作。

package com.wise.tiger

public class ProjectVersion{
	private Integer major;
	private Integer minor;

	public ProjectVersion(Integer major,Integer minor){
		this.major = major;
		this.minor = minor;
	}
	setter/getter
}


A、Groovy为你所编写的类假定了合理的默认值

1.表达式后面的;是可选的

2.每个类,构造器和方法默认是public的

3.方法体中最后一个表达式的值会被作为返回值(return语句是可选的)

4.自动添加setter/getter方法

5.类的属性可以通过.号来获取,在底层(调用的是setter/getter)

6.==比较两个实例,调用的是equals方法,不会有空指针NullpointerExcption异常


B、高效特性:

1.assert语句

2.可选类型定义

3.可选的括号(方法调用)

4.字符串
'':单纯字符串
def str1 = 'this is a single-quoted string'

"":可插值到表达式或变量中
def language = 'groovy'
	def sentence = "$language is awesome"

"""""":字符串可换行
def str2 = """
		this
		is a
		multiline
		string
	"""

三、集合API
Groovy为集合API的实现提供了简洁的语法,使得其比java中类似的使用更加方便。

List:默认的类型就是 ArrayList;集合元素可以接收任意的数据类型
def builTools = ['Ant','Maven']
	assert builTools.getClass() == java.util.ArrayList
	assert builTools.size() == 2
	assert builTools[1] == 'Maven'

	builTools << 'Gradle'
	assert builTools.size() == 3
	assert builTools[2] == 'Gradle'

	buildTools.each{buildTool ->
		println buildTool
	}


假如我想定义一个 LinkedList集合,我该如何去指定一个集合的类型呢?

通过 as 关键字来指定。def list = [1, 2, 3] as LinkedList
通过强类型来定义你想要的类型。LinkedList list1 = [4, 5, 6]

Map:默认实现是java.lang.LinkedHashMap

def inceptionYears = ['Ant': 2000,'Maven': 2004]
	assert inceptionYears.getClass() == java.lang.LinkedHashMap
	assert inceptionYears.size() == 2
	assert inceptionYears.Ant == 2000
	assert inceptionYears['Ant'] == 2000
	
	inceptionYears['Gradle'] = 2009
	assert inceptionYears.size() == 3
	assert inceptionYears['Gradle'] == 2009

	inceptionYears.each{buildTool,year ->
		println "$buildTool was first released in $year"
	}


四、命名参数
ProjectVersion类暴露了一个构造器来初始化其中的属性。假设你没有定义构造器。Groovy提供了一样更加方便的方式来设置属性值----命名参数

class ProjectVersion{
		Integer major;
		Integer minor;
	}
	
	def verson = new ProjectVersion(major: 1,minor: 10)
	assert version.minor == 10;
	version.minor = 30;
	assert version.minor == 30

五、闭包

闭包是一个类型为groovy.lang.Closure的代码块,和lambda表达式特性类似。闭包可以赋值给变量,作为参数传递给方法,并且可以像普通方法一样来调用

隐式的闭包参数
每个没有显式定义任何参数的闭包都可以访问一个隐式的参数it。it代表调用这个闭包的时候第一个传递进来的参数。如果没有提供参数,那么参数的值就是null。
def incrementMajorProjectVersion = {
	it.major++
}

def projectVersion = new ProjectVersion(major: 1, minor: 10)
incrementMajorProjectVersion(projectVersion)
assert projectVersion.major == 2


显式的闭包参数
除了使用隐式的闭包参数,也可以使用更具描述性的参数名。
def incrementMajorProjectVersion = {
	def projectVersion ->
	projectVersion.major++
}

def projectVersion = new ProjectVersion(major: 1, minor: 10)
incrementMajorProjectVersion(projectVersion)
assert projectVersion.major == 2


定义多个无类型参数的闭包

def incrementMajorProjectVersion = {version,major,minor->
	version.major = major
	version.minor = minor
}

def projectVersion = new ProjectVersion(major: 1, minor: 10)
incrementMajorProjectVersion(projectVersion,2,1)
assert projectVersion.major == 2
assert projectVersion.minor == 1


闭包返回值
闭包总是会返回一个值。返回值是闭包的最后一条语句的值(如果没有显式的return语句),或者是可执行的return语句的值。如果闭包的最后一条语句没有值,就返回null。

def projectVersion = new ProjectVersion(major: 1, minor: 10)
def minorVersion = {projectVersion.minor}
assert minorVersion() == 10


闭包作为方法参数
Integer incrementVersion(Closure closure,Integer xount){
		closure() + count
	}
def projectVersion = new ProjectVersion(major: 1, minor: 10)
assert incrementVersion({projectVersion.minor},2) == 12


闭包委托
闭包代码在委托的闭包上执。默认的,这个委托就是闭包的所有者。比如,如果你在Groovy脚本中定义了一个闭包,那么所有者就是一个groovy.lang.Script实例。闭包的隐式变量delegate允许你重新定义默认的所

有者。如下代码设置了委托给ProjectVersion实例,这意味着所有闭包都在这个实例上执行。

class ProjectVersion{
  
	Integer major
  
	Integer minor
  
  
	void increment(Closure closure){ //用闭包作为参数
    
		closure.resolveStrategy = Closure.DELEGATE_ONLY //只处理委托引用
    
		closure.delegate = this  //设置闭包委托
    
		closure()
  
	}

}
 

def project = new ProjectVersion(major: 1, minor: 10)

project.increment { major += 1}

assert project.major == 2


五、在Gradle构建脚本中使用Groovy

在大多数情况下,在构建脚本中调用的属性和方法都自动委托给org.gradle.api.Project实例

apply plugin: 'java'  //调用Project的apply方法,关于参数,提供一个只有一个键值对的Map,方法调用省略括号
 
version = '0.1' //通过调用Project的setter方法为项目设置版本属性
 
repositorier{//调用Project的repositories方法并传递一个闭包
  mavenCentral()
  //调用闭包委托的mavenCentral()方法
}
 
dependencies { //调用Project的dependencies方法,并传递一个闭包参数
  compile 'commons-codec:1.6'
  //调用闭包委托的对象的compile方法,用一个String作为参数,方法调用省略了括号
}

分享到:
评论
1 楼 迷茫的眼 2019-05-13  
太实用了,找了很久终于找到了。Adan老师我给你点个赞

相关推荐

    SpringBoot-Gradle-Maven-Java-Groovy

    SpringBoot、Gradle、Maven、Java和Groovy是Java生态系统中的重要组成部分,它们在现代软件开发中扮演着至关重要的角色。这篇详细的知识点解析将深入探讨这些技术及其相互关系。 1. **SpringBoot**: SpringBoot是...

    Gradle文件配置及groovy语法介绍.mp4

    Gradle文件配置及groovy语法介绍

    groovy 学习gradle学习经典手册

    《Groovy学习与Gradle实践经典手册》是一本深度探讨Groovy编程语言和Gradle构建工具的指南,专为Android及Java开发人员提供全面的知识覆盖。本书旨在帮助开发者提升在项目管理和自动化构建方面的技能,使其能够高效...

    gradle用户手册中文版

    ### Gradle用户手册中文版知识点概述 #### 一、简介 **Gradle**是一种基于Java的构建工具,它采用了一种灵活的DSL(领域特定语言)——Groovy,来定义项目构建逻辑。Gradle旨在提高构建过程的效率与灵活性,并支持...

    Android Gradle 用户指南

    **Android Gradle 用户指南** Android Gradle 是Google推出的一个用于构建Android应用的自动化工具,它基于流行的Gradle构建系统,为开发者提供了强大的构建和依赖管理功能。本指南将深入探讨Android Gradle插件的...

    gradle2kts:Gradle Groovy到Gradle Kotlin转换工具-停产秒杀

    需要注意的是,`gradle2kts`虽然能完成大部分转换工作,但可能无法处理所有的Groovy特性或自定义插件配置。有些复杂的构建逻辑可能需要手动调整。此外,由于“停产秒杀”的标签,意味着`gradle2kts`可能不再维护,...

    Android-从Groovy转换为KotlinDSLforGradle专注于Android

    Groovy是早期Gradle构建系统的主要语言,而Kotlin DSL(Domain Specific Language)则是近年来逐渐流行的趋势,特别是在Android开发中。Kotlin DSL提供了更简洁、类型安全的构建脚本,提升了开发效率和代码可读性。 ...

    build-master-gradle-src-main-groovy-com-android-build-gradle.tar.gz

    android gradle plguin api 下载自官网,官方地址: https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle

    Gradle 用户指南 .pdf

    中文翻译《Gradle 3 用户指南》,Gradle是一个构建系统, 我们认为它是 java ... 而不需要远程仓库或者 pom.xml 或者 ivy 配置文件 优先支持 Ant 式的任务和构建 基于 groovy 的构建脚本 有丰富的领域模型来描述你的构建

    gradle中的groovy1

    Gradle使用Groovy作为其主要的构建脚本语言,这使得编写构建脚本变得简单且高效。Groovy是一种面向对象的、动态的编程语言,它在语法上与Python有某些相似之处,但同时也具有自己独特的特性。 首先,Groovy的语法...

    实战Gradle

    Gradle 是Java 软件开发中的自动化..., 因为Groovy 用于编写Gradle 构建配置的DSL,所以为了帮助读者更好地理解Gradle,《实战Gradle》还讲解了Groovy 的基本知识,虽然不是全方位地讲解Groovy,但是理解Gradle 足矣。

    Android Gradle用户指南

    ### Android Gradle 用户指南知识点详解 #### 一、Gradle构建系统概述 **目标与优势:** - **目标:** - **简化代码与资源复用:**Gradle旨在简化跨项目共享代码和资源的过程,使得开发人员能够更加高效地进行...

    Android gradle 资源下载 gradle-6.7.1-all.zip gradle-4.10.1-all.zip

    Gradle是一种基于Groovy和Kotlin DSL(领域特定语言)的构建工具,它允许开发者用简洁易读的代码来定义项目构建过程。相比Android Studio早期使用的Ant和后来的Maven,Gradle提供了更加灵活的依赖管理和构建流程定制...

    gradle用户指南.docx

    - **下载与安装**:用户需要从官网下载对应操作系统的Gradle发行版,然后按照指南进行安装。 - **JVM选项**:Gradle运行在JVM上,可以通过环境变量设置JVM参数。 - **故障排除**:遇到问题时,可以检查环境配置,...

    Groovy语法&Gradle配置学习笔记

    - **Gradle插件**:了解常用的Gradle插件,如Java插件,学会如何自定义和应用插件。 - **依赖管理**:熟悉Gradle的依赖配置,如何指定依赖版本,以及排除冲突依赖。 - **构建生命周期和任务**:掌握Gradle任务的生命...

    Gradle Tutorial

    2. Gradle的实现语言:它是用Groovy语言实现的,并且使用JVM,这意味着用户不需要从头编写每一个构建脚本。 3. Gradle的核心概念: - 项目(Projects):代表用户希望构建的软件。 - 任务(Tasks):为构建项目所...

    gradle-5.4.1.7z

    6. `samples`:提供了示例项目,帮助用户了解Gradle的用法和最佳实践。 7. `docs`:包含Gradle的文档,如API参考、用户手册等。 8. `bin`:包含可执行文件,如Gradle的命令行工具。 通过这些文件,用户不仅可以学习...

    项目构建工具Gradle官方用户手册(英文)

    - **Groovy基础**:构建脚本是用Groovy语言编写的,因此需要了解Groovy的一些基础概念。 #### 7. 教程-'This and That' - **目录创建**:如何在构建过程中创建目录。 - **Gradle属性和系统属性**:如何在构建脚本中...

    gradle合集 gradle-6.2.2.zip

    2. **依赖管理**:Gradle 的依赖管理系统允许开发者声明项目所需的库和版本。在6.2.2版本中,依赖解析更加精确,避免了因依赖冲突导致的问题,同时提供了更好的依赖报告,帮助开发者理解项目的依赖结构。 3. **插件...

Global site tag (gtag.js) - Google Analytics