一 项目的构建
两个基本概念:项目(project)和任务(task)
关系: 一个构建至少包含一个项目、一个项目可包含多的任务,项目与项目 项目中任务与任务都可以建立依赖关系
项目:
一个项目代表一个构建的组件(如jar文件),当构建启动时,gradle会根据build.gradle实例化一个org.gradle.api.Project类
属性:
group name version 确定唯一个组件
apply dependencies repositories task
ext
gradle.properties 存项目公共属性
任务(org.gradle.api.Task):
任务动作:定义一个任务动作的执行顺序
- doFirst:task执行时,最开始的操作
- doLast(<<):task执行时,最后的操作
依赖:定义任务与任务之间的依赖关系
dependsOn
二 生命周期
构建的生命周期包括:初始化、配置、执行,并且对每个阶段完成后都有一个hook方法,可自定义处理逻辑
- 初始化: 首先寻找一个叫settings.gradle的文件,检查是否当前构建是否是多项目构建,并负责创建项目树,即为参与构建的每个工程创建一个 project 实例,并隐式可用
- 配置:此阶段,对 project 对象进行配置,属于构建的所有 projects 的构建脚本都会被执行,执行的代码可分为配置代码和动作代码(任务行为的定义),确定任务的依赖关系及执行顺序
- 执行:按照配置阶段的任务顺序进行执行
三 依赖管理
工件坐标 group name version
常用仓库
mavenLocal/mavenCentral/jcenter
自定义maven仓库
文件仓库
repositories {
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
mavenLocal()
mavenCentral()
jcenter()
}
依赖冲突解决策略(冲突时gradle默认使用最新的版本)
- 1、查看依赖报告
- 2、排除传递性依赖
- 3、强制一个版本
configurations.all{
resolutionStrategy{
failOnVersionConflict()
force 'org.slf4j:slf4j-api:1.7.22'
}
}
dependencies {
compile('org.hibernate:hibernate-core:3.6.3.Final') {
exclude group: "org.slf4j", module: "slf4j-api"
}
testCompile group: 'junit', name: 'junit', version: '4.11'
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.1'
}
四 多项目构建
项目总控制bulid.gradle文件
allprojects{ //主项目定义
apply plugin: 'java'
apply plugin: 'war'
sourceCompatibility = 1.8
}
subprojects{ //子项目中同一定义
repositories {
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
mavenLocal()
mavenCentral()
}
dependencies {
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.1'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
}
model模块 中文件 bulid.gradle 不用定义
repository模块bulid.gradle
dependencies {
compile project(":model")
}
web模块bulid.gradle
apply plugin:'war'
dependencies {
compile project(":repository")
}
五 自动化测试
六 发布
allprojects{
apply plugin: 'java'
apply plugin: 'war'
sourceCompatibility = 1.8
apply plugin: 'maven-publish'
publishing{
publications{
myPublish(MavenPublication){
from components.java
groupId 'com.yincai.gradle'
}
}
repositories {
maven{
name 'myRepo'
url ''
}
}
}
}
备注:自定义Task实例
def creatdir = { path -> File dir = new File(path) dir.mkdirs() } task makeJavaDir{ def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resources',] doFirst{ paths.forEach(creatdir) } } task makeWebDir{ dependsOn 'makeJavaDir' def paths = ['src/main/webapp','src/test/webapp'] doLast{ paths.forEach(creatdir) } } //Gradle可以在没有安装Gradle的情况下使用,这时候就需要Gradle Wrapper了。Gradle Wrapper其实就是一个脚本文件,它会在没有安装Gradle的情况下为我们下载Gradle,之后我们就可以使用gradlew
命令,像使用gradle
一样来使用Gradle了
//生成wrapper任务
task wrapper(type: Wrapper){ gradleVersion = '3.0' }