Gradle 可以代替 Maven 完成自动化构建。
Gradle 结构
- setting.gradle // 确定参与构建的 Project 集合
- build.gradle // 执行 Task 的必备信息
- TaskA // 最小执行单元
- TaskB
- ...
- build.gradle // 执行 Task 的必备信息
最基本的任务定义
Task 是 Gradle 构建的最小执行单元。 clean 就是一种最常见的 Task。
Task 就相当于 Java 中的一个类,继承于基类 DefaultTask,也可以再被子 Task 集成
代码语言:javascript复制// build.gradle
task hello {
println "配置阶段执行"
doFirst {
println '最先执行'
}
doLast {
println '最后执行'
}
}
代码语言:javascript复制$ gradle hello
> Configure project :
配置阶段执行
> Task :hello
最先执行
最后执行
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
常用命令:
- gradle init 用于创建项目骨架
单个 Java 项目构建
常用任务:
- clean 删除 build 目录以及所有构建完成的文件。
- assemble 编译并打包 jar 文件
- check 编译并测试代码。
- dependencies 添加外部依赖
Java 项目 build.gradle 示例
代码语言:javascript复制apply plugin: 'java' // 使用 Java 插件。可用于自动寻找对应目录,及其他默认配置
apply plugin: 'eclipse' // 使用 eclipse 插件。
sourceCompatibility = 1.5 // 编译级别
version = '1.0' // 代码版本
jar { // 为 jar (打包)任务的 manifest 模块增加属性定义
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
}
}
repositories { // 配置 Gradle 的依赖源,此处使用 Maven 作为依赖源
mavenCentral()
}
dependencies { // 配置项目依赖,相当于 Maven 种的 dependencies
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4. '
}
test { // 为测试任务增加属性定义
systemProperties 'property': 'value'
}
uploadArchives { // 发布 Jar 包
repositories {
flatDir {
dirs 'repos'
}
}
}
多个 Java 项目构建
项目结构
代码语言:javascript复制multiproject/
api/
services/webservice/
shared/
此处有三个工程。api 工程用来生成给客户端用的 jar 文件,这个 jar 文件可以为 XML webservice 提供 Java 客户端。webservice 是一个 web 应用,生成 XML。shared 工程包含的是前述两个工程共用的代码。
- 多项目构建定义 定义一个多项目构建工程需要在根目录(本例中与 multiproject 同级)创建一个setting 配置文件来指明构建包含哪些项目。并且这个文件必需叫 settings.gradle 本例的配置文件如下: // /settings.gradle include "shared", "api", "services:webservice", "services:shared"
- 公共配置 对多项目构建而言,总有一些共同的配置.在本例中,我们会在根项目上采用配置注入的方式定义一些公共配置。根项目就像一个容器,子项目会迭代访问它的配置并注入到自己的配置中。这样我们就可以简单的为所有工程定义主配置单了: // /build.gradle subprojects { apply plugin: 'java' apply plugin: 'eclipse-wtp' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:4.11' } version = '1.0' jar { manifest.attributes provider: 'gradle' } } 注意: 这里为每个子项目都应用了 Java 插件。
- 多项目中的工程依赖 // /api/build.gradle dependencies { compile project(':shared') }
- 打包发布 task dist(type: Zip) { dependsOn spiJar from 'src/dist' into('libs') { from spiJar.archivePath from configurations.runtime } } artifacts { archives dist }