Gradle工具使用
Gradle只是一个通过Groovy编写task脚本来实现项目构建的工具。需要自己实现task,通过 gradle -q
taskName执行脚本
Java使用Gradle
java插件
java使用Gradle需要引入java插件,已经实现构建/编译等脚本(gradle tasks列出所有task)
apply plugin: 'java'
加入仓库
repositories {
mavenCentral()
}
加入依赖
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
定制属性(可以通过task properties列出所有属性)
sourceCompatibility = 1.5
version = '1.0'
jar {
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
}
}
发布
uploadArchives {
repositories {
flatDir {
dirs 'repos'
}
}
}
IDEA插件
apply plugin: 'idea'
生产IDEA项目
gradle idea
定义一个多项目结构(setting.gradle)
include "shared", "api", "services:webservice", "services:shared"
子项目通用配置(subprojects )
ubprojects {
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
version = '1.0'
jar {
manifest.attributes provider: 'gradle'
}
}
子项目之间依赖
dependencies {
compile project(':shared')
}
依赖配置
- compile-用来编译项目源代码的依赖.
- runtime-在运行时被生成的类使用的依赖. 默认的, 也包含了编译时的依赖.
- testCompile-编译测试代码的依赖. 默认的, 包含生成的类运行所需的依赖和编译源代码的依赖.
- testRuntime-运行测试所需要的依赖. 默认的, 包含上面三个依赖.
dependencies {
compile 'org.hibernate:hibernate-core:3.6.7.Final'
}
仓库
repositories {
mavenCentral()
maven {
url "http://repo.mycompany.com/maven2"
}
}
发布artifacts-需要加入maven插件
插件可以很好的定义一个项目的 artifacts, 所以你并不需要做一些特别的工作来让 Gradle 需要发布什么. 你可以通过在 uploadArchives 任务里加入仓库来完成
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}
}
Groovy插件
这个插件扩展了 Java 插件, 加入了编译 Groovy 的依赖. 你的项目可以包含 Groovy 的源代码, Java 源代码-需要配置仓库地址和引入gradle依赖
apply plugin: 'idea'
apply plugin: 'groovy'
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.3.3'
testCompile 'junit:junit:4.11'
}
War插件 - 构建war包
这个插件也会在你的项目里加入 Java 插件. 运行 gradle build 将会编译, 测试和创建项目的 WAR 文件. Gradle 将会把源文件包含在 WAR 文件的 src/main/webapp 目录里. 编译后的 classe , 和它们运行所需要的依赖也会被包含在 WAR 文件里.
apply plugin: 'war'
jetty插件-运行web应用
apply plugin: 'jetty'
执行gradle命令
gradle jettyRunWar
Gradle命令
排除任务
gradle build-x test
失败后继续执行
gradle build-x test --continue
Gradle构建脚本
项目API
java 对于构建脚本中每个项目,Gradle 都创建了一个 Project 类型的对象用来关联此项目
构建脚本中每个被调用的方法(这些方法并未在构建脚本中定义)都被委托给当前 Project 对象(使用 Project 对象引用方法)。构建脚本中每个被操作的属性(这些属性并未在构建脚本中定义)都被委托给当前 Project 对象(使用 Project 对象引用属性).
println name
println project.name
项目属性
Project 对象提供了一些标准的属性,您可以在构建脚本中很方便的使用他们. 下面列出了常用的属性:
Name | Type | Default Value |
---|---|---|
project | Project | Project 实例对象 |
name | String | 项目目录的名称 |
path | String | 项目的绝对路径 |
description | String | 项目描述 |
projectDir | File | 包含构建脚本的目录 |
build | File | projectDir/build |
group | Object | 未具体说明 |
version | Object | 未具体说明 |
ant | AntBuilder | Ant实例对象 |
局部变量
局部变量使用关键字 def 来声明,其只在声明它的地方可见 . 局部变量是 Groovy 语言的一个基本特性.
def dest = "dest"
task copy(type: Copy) {
form "source"
into dest
}
拓展属性
在 Gradle 领域模型中所有被增强的对象能够拥有自己定义的属性. 这包括,但不仅限于 projects , tasks , 还有 source sets . Project 对象可以添加,读取,更改扩展的属性. 另外,使用 ext 扩展块可以一次添加多个属性.
apply plugin: "java"
// 向 Project 对象添加了两个扩展属性
ext {
springVersion = "3.1.0.RELEASE"
emailNotification = "build@master.org"
}
// perpose 的属性被添加到每个 sourceSets
// sourceSets 定义
sourceSets.all { ext.purpose = null }
Groovy特性
属性存取器
Groovy 自动将一个属性的引用转换为相应的 getter 或 setter 方法.
// 使用 getter 方法
println project.buildDir
println getProject().getBuildDir()
可有可无的圆括号
在调用方法时,圆括号可有可无,是个可选的.
test.systemProperty 'some.prop', 'value'
test.systemProperty('some.prop', 'value')
闭包
def static funcWithClosure(int num, final Closure closure) {
(1..num).collect { closure(it) }
}
println funcWithClosure(5, {x -> x*x})
当一个方法的最后一个参数是一个闭合时,您可以在方法调用后放置一个闭合.
println funcWithClosure(5) { x -> x * 2 }