1.构建脚本:
Gradle构建中的两个基本概念是项目(project)和任务(task),每个构建至少包含一个项目,项目中包含一个或多个任务。在多项目构建中,一个项目可以依赖于其他项目;类似的,任务可以形成一个依赖关系图来确保他们的执行顺序。
1.1项目(project):
一个项目代表一个正在构建的组件(比如一个jar文件),当构建启动后,Gradle会基于build.gradle实例化一个org.gradle.api.Project类,并且能够通过project变量使其隐式可用。
1.1.1project常用属性:
group、name、version(这三个属性就是一个组件的坐标,可以唯一确定一个组件)
1.1.2project常用方法:
apply(应用于插件)、dependencies(声明项目依赖于哪些Jar包或者项目)、repositories(表示寻找依赖的仓库)、task(声明有哪些任务)
属性的其他配置方式:ext、gradle.properties
1.2任务(task):
任务对应org.gradle.api.Task。主要包括任务动作和任务依赖。任务动作定义了一个最小的工作单元。可以定义依赖于其他任务、动作序列和执行条件。
1.2.1任务(task)里的方法:
dependsOn(用于声明任务依赖)
doFirst,doLast <<(分别是在动作列表的前面和后面添加动作)
很多时候不需要我们自定义任务,一般的插件都自带任务,如下:插件jar在执行自带的任务jar时还依赖了其他三个任务
同样也可以通过自定义任务来实现插件无法完成工作,例如可以通过自定义任务来创建目录结构:
2.构建声明周期:
构建主要分为三个阶段:
2.1初始化阶段:
gradle会根据构建脚本创造一个项目,也就是一个project类,在多项目构建中,他会初始化所有将要参与到构建中的项目
2.2配置阶段:
生成task的依赖顺序以及执行顺序,这是根据配置代码(除了动作代码之外的代码)来生成的
配置代码举例:
task loadVersion{
project.version = '1.0'
}
2.3执行阶段:
执行动作代码,执行完之后,一个构建也就完成了
动作代码举例:
task loadVersion <<{
print 'success'
}
整个过程如下:
3.依赖管理:
几乎所有的基于JVM的软件项目都需要依赖外部类库来重用现有的功能。自动化的依赖管理可以明确依赖的版本,可以解决因传递性依赖带来的版本冲突。
常用仓库:mavenLocal/mavenCentral/jcenter、自定义maven仓库(私服)、文件仓库(本地机器的文件路径)
3.1自动化依赖管理:
3.2依赖阶段配置:
源代码阶段(compile编译阶段、runtime运行时阶段),测试阶段(testCompile编译阶段、testRuntime运行时阶段)
3.3依赖阶段关系:
运行时阶段都是扩展自编译阶段的,也就是编译阶段依赖的jar包在运行时也都会依赖,反之不一定依赖;如果是源代码依赖的,测试代码都会依赖,反之也不一定会依赖
3.4解决依赖版本冲突:
步骤:1.查看依赖报告、2.排除传递性依赖、3.强制一个版本(gradle会默认依赖最高版本)
修改默认解决策略:
configurations.all{
resolutionStrategy{
failOnVersionConflict()
}
}
排除传递性依赖:
compile('org.hibernate:hibernate-core:3.6.3.Final){
//排除单个最低版本的依赖
exclude group:"org.slf4j",module:"slf4j-api"
//或者使用下面的方法排除所有的传递性依赖
//transitive = false
}
强制指定一个版本:
configurations.all{
resolutionStrategy{
force 'org.slf4j:slf4j-api:1.7.24'
}
}
4.多项目构建:
项目模块化:
对原先项目中的业务、web和持久化进行区分,将不同层次的代码封装到不同的module中,然后进行相互的依赖。这一做法的好处就在于根项目可以统一的管理不同的子项目,思维逻辑也更加清楚。
5.发布:
首先是导入插件:
apply plugin: 'maven-publish'
插件下面配置两个属性:
publishing{
publications{
myPublish(MavenPublication){
from components.java
}
}
repositories{
maven{
name "仓库名称"
url "私服地址或者别的发布地址"
}
}
}