一、关于构建工具
1.1 构建工具的作用
依赖管理;测试、打包、发布;机器能干的活,绝不自己动手
1.2 主流构建工具
- Ant:编译、测试、打包;
- Maven:依赖管理、发布;
- Gradle:Groovy,具有更高的灵活性和可扩展性。
二、gradle概述
2.1 gradle是什么?
一个开源的项目自动化构建工具,建立在Apache Ant和Apache Maven概念的基础上,并引入了基于Groovy的特定领域语言(DSL),而不再使用XML形式管理构建脚本。
2.2 gradle能做什么?
进行依赖管理,自动化运行测试、打包,发布到指定的地方去。
三、groovy
3.1 groovy是什么?
groovy是用于java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。
3.2 与java比较
- groovy完全兼容java的语法
- 分号可以不写
- 类、方法默认是public
- 编译器给属性自动添加getter和setter方法
- 属性可以直接用点号获取
- 如果有返回值,可以不写return xxx,因为最后一个表达式的值会被作为返回值
- == 等同于equal
下面是一个简单的groovy类样例:
class ProjectVesion {
def major
def minor
ProjectVesion(def major,def minor){
this.minor = minor
this.major = major
}
}
ProjectVesion v1 = new ProjectVesion(1,1)
println(v1.major)
ProjectVesion v2 = new ProjectVesion(1,1)
println(v2.major == v1.major)

3.3 高效的groovy特性
- 自带的assert语句可以在任何地方进行断言
- 弱类型编程语言,可以用def定义任何类型
- 括号可以不写
- 字符串三种形式:单引号,双引号,三单引号
def vesion = 1
//groovy中的字符串
def s1 = '单引号的String只是普通的string'
def s2 = "双引号的String可以添加变量${vesion}"
def s3 = '''三单引号的String可以换行
换行了,第二号。。。。
第三行。。。'''
println s1
println s2
println s3

- set,map,list有更简单的写法
//groovy中的list,默认类型为ArrayList
def list = ['s1','s2','s3']
//追加
list << 's4'
assert list.getClass() == ArrayList
assert list.size() == 4
//groovy中的map,默认类型为LinkedHashMap
def map = ['s1':'String1','s2':'String2']
//追加
map.'s3' = 'String3'
println(map.'s3')
println(map.getClass())

- 闭包
//闭包
//带有一个参数的闭包;箭头后面是方法体
def c1 = {
v -> println v
}
//不带参数的闭包
def c2 = {
println 'hello'
}
//使用闭包作为参数的方法
def method1(Closure closure){
closure('param')
}
def method2(Closure closure){
closure()
}
//调用方法,c1和c2分别作为参数
method1(c1)
method2(c2)

四、看懂一个简单的gradle脚本
//一个简单的java构建脚本.
//前提:构建脚本中默认都是有一个project实例的;
//apply为方法,传入参数plugin的值为'java'
apply plugin: 'java'
//version是一个变量,被赋值为'0.1'
version = '0.1'
//repositories是一个使用闭包为参数的方法,传入的参数为闭包{mavenCentral()}
repositories{
mavenCentral()
}
//dependencies也是一个使用闭包为参数的方法;
//compile是一个方法,传入参数是'commons-codec:commons-codec:1.6'
dependencies{
compile 'commons-codec:commons-codec:1.6'
}
五、创建第一个gradle项目
(1)右键==》new==》module

(2)选择gradle==》java

(3)输入项目的组和名字

(4)使用默认的gradle或者本地安装的gradle。这里我选择默认的

(5)next==》finish

六、gradle构建脚本
6.1 构建块
gradle构建中的两个基本概念是项目(project)和任务(task),每个构建至少包含一个项目,项目中包含一个或多个任务。在多项目构建中,一个项目可以依赖于其他项目;类似的,任务可以形成一个依赖关系图来确保他们的执行顺序
6.2 project和task的关系

6.3 project
一个项目代表一个正在构建的组件(比如一个jar文件),当构建启动后,gradle会基于build.gradle实例化一个org.gradle.api.Project类,并且能够通过project变量使其隐式可用
6.3.1 project属性
project有三个属性:group、name、version。
- group:组;
- name:名字;
- version:版本号。
这三个属性能唯一确定一个组件,如果不能,说明你的依赖是不明确的。
6.3.2 project几个比较重要的方法
- apply:应用插件
- dependencies:声明项目依赖于哪些java包
- repositories:仓库。表示去哪个仓库加载java包
- task:声明项目里有哪些任务
6.3.3 project属性的其他配置方式
- ext
- gradle.properties。可以在gradle.properties里面用键值对的方式声明属性
6.4 task
任务对应org.gradle.api.Task。主要包括任务动作和任务依赖。任务动作定义了一个最小的工作单元。可以定义依赖于其他任务、动作序列和执行条件 。
任务不一定是我们自己定义的,我们可以自己定义任务,但是我们使用了插件以后,这些插件默认是带了很多任务的
6.4.1 task比较重要的方法
- dependsOn:声明动作依赖
- doFirst、doLast(<<)。 doFirst:在动作列表最前面添加动作;doLast(<<):在动作列表最后面添加动作
6.5 构建的生命周期

- 初始化: 初始化项目,有哪些项目要参与到构建中
- 配置阶段: 生成task依赖关系和执行图
- 执行阶段: 指定task的动作
七、依赖管理
几乎所有的基于JVM的软件项目都需要依赖外部类库来重现现有的功能。自动化的依赖管理可以明确依赖的版本,可以解决因传递性依赖带来的版本冲突
7.1 工件坐标
工件坐标,也就是java包的位置,由group,name,version确定。
7.2 常用仓库
- mavenLocal:本地仓库
- mavenCentral/jcenter:远程仓库
- 自定义maven仓库,也就是私服
- 文件仓库
前三个比较常用,在配置时一般会先从本地仓库获取java包,再从私服获取,如果本地仓库和私服都没有,就从远程仓库获取
八、实操:多项目构建
在企业项目中,包层次和类关系比较复杂,把代码拆分成模块通常是最佳实践,这需要你清晰的划分功能的边界,如果把业务逻辑和数据持久化拆分开来。项目符合高内聚低耦合时,模块化就变得很容易,这是一条很好的软件开发实践
8.1 项目结构
所有项目=子项目+根项目 。
子项目划分为三个:model、repository、web


8.2 gradle配置
8.2.1 根目录build.gradle
group 'com.practice.gradle'
version '1.0-SNAPSHOT'
//所有项目配置
allprojects {
apply plugin: 'java'
apply plugin: 'maven-publish'//用于发布
//配置属性,配置要发布什么,配置仓库地址
publishing {
publications {
//myPublish是自定义的,这里把java产生的输出发布出去
myPublish(MavenPublication) {
from components.java
}
}
repositories {
//URL:一般为私服地址
maven {
name ""
url ""
}
}
}
sourceCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
}
}
//子项目配置
subprojects {
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
}
8.2.2 web子项目 build.gradle
//web项目打包成war
plugins {
id 'war'
}
dependencies {
compile project (":repository")
}
8.2.3 repository子项目 build.gradle
dependencies {
compile project (":model")
}
九、项目发布
项目发布,简单来说分三步骤:
(1)使用maven-publish插件
apply plugin: 'maven-publish'//用于发布
(2)配置属性,配置要发布什么,配置仓库地址
//配置属性,配置要发布什么,配置仓库地址
publishing {
publications {
//myPublish是自定义的,这里把java产生的输出发布出去
myPublish(MavenPublication) {
from components.java
}
}
repositories {
//URL:一般为私服地址
maven {
name ""
url ""
}
}
}
(3)执行发布任务。在项目的根目录下找到publishing,执行对应的发布任务

这篇博客详细介绍了Gradle构建工具,包括其作用、与主流构建工具的对比、Groovy语言特性、构建脚本解析、项目创建、依赖管理、多项目构建以及项目发布流程。通过实例展示了Gradle如何简化构建过程。
819

被折叠的 条评论
为什么被折叠?



