看懂Gradle脚本(5)- 跟Gradle学领域驱动设计

领域驱动设计(DDD)

如果第一次听说领域驱动设计,那么赶紧买一本,或借一本Eric Evans写的那么同名经典书补一下课。Gradle是一个自动化build工具,所以Gradle面对的领域就是自动化构建这一领域。Gradle是按照DDD的思想设计和开发的,所以自动化构建领域里的大部分概念,在Gradle的源代码里都有一个接口或类与之对应。本文介绍对Gradle新手来说最重要的三个领域对象:ProjectTaskAction

Project

Project是Gradle最重要的一个领域对象,我们写的build.gradle脚本的全部作用,其实就是配置一个Project实例。在build.gradle脚本里,我们可以隐式的操纵Project实例,比如,apply插件、声明依赖、定义Task等,如下所示:

apply plugin: 'groovy'
dependencies {
  compile "org.eclipse.jetty.aggregate:jetty-all:9.1.3.v20140225"
}
task myTask {
  // ...
}

apply、dependencies、task等实际上是Project的方法,参数是一个代码块。如果需要,也可以显示的操纵Project实例,比如:

project.ext.myProp = 'myValue'

Task

Gradle的Task等同于AntTarget。在内部,Task被组织成了一个有向无环图(DAG)。Gradle保证Task按照依赖顺序执行,并且每个Task最多只被执行一次。当我们看到下面这段脚本的时候,只要明白两点就可以了:

task myTask {
  // ...
}
  1. 给Project添加一个名为“myTask”的任务
  2. 用一个闭包来配置这个任务

在闭包中,我们可以充分利用Gradle提供的DSL来配置任务,比如,给任务添加Action

Action

Task可以包含n个Action,Task提供了doFirstdoLast方法来给自己添加Action,如下所示:

task myTask {
    doFirst {
        println 'hello'
    }
    doLast {
        println 'world'
    }
}

还提供了<<运算符,如下所示:

task myTask << {
    println 'hello world'
}

结论

build.gradle脚本的真正作用,就是配置一个Project实例。在执行build脚本之前,Gradle会为我们准备好一个Project实例,执行完脚本之后,Gradle会按照DAG依次执行任务。

看懂Gradle脚本(5)- 跟Gradle学领域驱动设计

时间: 2024-08-08 02:59:45

看懂Gradle脚本(5)- 跟Gradle学领域驱动设计的相关文章

.NET领域驱动设计—看DDD是如何运用设计模式颠覆传统架构

阅读目录: 1.开篇介绍 2.简单了解缘由(本文的前期事宜) 3.DomainModel扩展性(运用设计模式设计模型变化点) 3.1.模型扩展性 3.2.设计模式的使用(苦心专研的设计模式.设计思想可以随意使用了) 3.3.部分类的使用(封装内部对象) 3.4.高强度的OO设计(面向特定领域的高度抽象设计形成特定领域框架) 4.DomainModel业务逻辑规则配置(将扩展点分离后使用适当的配置将规则IOC进去) 5.DDD简单总结(DDD是什么?它是"战术") 1]开篇介绍 这篇文章

看懂sh脚本

1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编写脚本完成时,如果要执行该脚本,还必须使其可执行. 要使编写脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束.我们真诚地建议您在程序中使用注释. 3 变量 在其他编程语言中您必须使用变量.在

Gradle学习系列之一——Gradle快速入门(转)

这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构建多个Project 自定义Task类型 自定义Plugin 请通过以下方式下载本系列文章的Github示例代码: git clone https://github.com/davenkin/gradle-learning.git 和Maven一样,Gradle只是提供了构建项目的一个框架,真正起作

Gradle学习系列之一——Gradle快速入门

Gradle学习系列之一--Gradle快速入门 这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构建多个Project 自定义Task类型 自定义Plugin 请通过以下方式下载本系列文章的Github示例代码: git clone https://github.com/davenkin/gradle-learning.git 和Maven一样,

看懂Gradle脚本(6)- Hello Groovy, Goodbye Getters&amp;Setters

本篇文章很简单,就是把下面这段Gradle脚本打回原形: version = 1.0 Groovy语法糖 Java程序员对JavaBeans和Getter/Setter方法肯定不陌生,所以就不过多介绍了.虽然现代的IDE都提供了快捷方式,可以很方便的给字段生成Getter和Setter方法,但我还是很讨厌他们.还好,有Groovy的语法糖在手,就可以跟Getter/Setter方法说再见了!上面的脚本,实际上是调用Project接口的setVersion方法: project.setVersio

看懂Gradle脚本(3)- Groovy AST转换

延续上一篇文章 上篇文章末尾有一段脚本,定义了一个Task: task 'myTask' { doLast { println 'hello world!' } } 我们已经知道,这段脚本其实是调用Project的task方法,并且传入两个参数:一个是Task的名字,另外一个是闭包,用来配置Task(在这段脚本中,给Task添加了一个Action). Task名的引号去哪儿了? 但是Gradle官方推荐的写法,是像下面这样定义Task: task myTask { // <-- doLast {

看懂Gradle脚本(2)- Groovy语言的闭包语法

本篇文章讨论下面这一小段Gradle脚本: repositories { mavenCentral() } 闭包字面量 闭包字面量看起来像Java里的代码块:用一对儿花括号包起来.前面讨论过,方法调用的圆括号可以省略,补上圆括号之后,脚本看起来是这样: repositories({ // <-- mavenCentral() }) 如果闭包是方法的最后一个参数,那么闭包可以放在圆括号外面 也就是说,上面的代码写成这样也是可以的: repositories() { // <-- mavenCen

看懂Gradle脚本(1)- Groovy语言的Map语法糖

这一系列文章是写给刚开始使用Gradle,并且对Groovy语法不是特别了解的Java程序员看的. 本篇文章的目标是解释清楚下面这行Gradle脚本: apply plugin: 'java' 行尾的分号是可选的 用过JavaScript语言的人对这个语法糖应该比较熟悉,下面是补上分号后的脚本: apply plugin: 'java'; Map字面量(Literal) Java语言只有基本类型.String和数组是有字面量的,如下所示: boolean b = false; int i = 1

写完批处理脚本,再写个Gradle脚本,解放双手

前言 上一篇写个批处理来帮忙干活---遍历&字符串处理中,我们已经学习如何写批处理脚本来帮我们做一些简单的重复性工作,本篇继续来学习如何用 Gradle 写脚本,让它也来帮我们干活 Gradle 脚本 需求场景跟上一篇一样,只是需要脚本能够帮我们遍历某个目录下的文件,然后分别针对每个文件执行 java 命令,再输出新的命名格式的文件即可,因此脚本涉及的方面仍然是:文件夹的遍历操作.字符串处理.执行 java 命令.下面开始学习吧: 1. 遍历指定文件夹下的文件 1.1 files() 命令: f