Gradle

配置相关依赖代码量少,不会像maven一样xml过多,打包编译测试发布都有,而且使用起来方便,利用自定义的任务可以完成自己想要的功能

下载地址

http://services.gradle.org/distributions/

环境配置

GRADLE_HOME={installed path}
PATH=%GRADLE_HOME%\bin

验证

gradle -v

仓库地址(maven通过settings.xml)

GRADLE_USER_HOME=

集成

IDEA
View -> Tool Windows

Eclipse
安装插件:http://download.eclipse.org/buildship/updates/e46/releases/2.x/

细节

project
[group, name, version]

  • settings.gradle
    管理多个项目,包含了项目的name

  • build.gradle
    apply 插件应用
    dependencies 声明依赖
    repositories 从上至下寻找jar包

Gradle Wrapper

以零配置方式用Gradle构建项目(无需先安装Gradle distribution),确保每个人都使用相同版本的构建工具。

为项目创建Gradle wrapper脚本

$ gradle wrapper --gradle-version 2.14.1
工程里生成文件
gradlew
gradlew.bat
gradle/wrapper/gradle-wrapper.jar
gradle/wrapper/gradle-wrapper.properties

查看项目的依赖关系图

$ gradle dependencies

Gradle支持单一项目构建和多项目构建

$ gradle api:rest:build

排除某些任务

$ gradle clean build -x test

分析构建(build/reports/profile)

$ gradle --profile build

了解gradle编译中的所有任务

$ gradle build --dry-run

安装到本地maven仓库

$ gradle install

查看gradle任务

$ gradle tasks
$ gradle tasks --all

使用Gradle守护程序(3.0版本默认开启)

gradle build --daemon

多线程构建

打开 ~/.gradle/gradle.properties 添加以下行 org.gradle.parallel=true

自定义Gradle任务

1
2
3
4
5
6
7
test.doFirst {
println("running tests…")
}

test.doLast {
println("done executing tests...")
}

为Gradle守护进程提供JVM参数

打开 ~/.gradle/gradle.properties
输入范例: org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

用离线模式运行

$ gradle build --offline

刷新Gradle依赖缓存(也可以手动删除 ~/.gradle/caches.下次构建时会下载所有依赖并加入缓存中)

$ gradle clean build --refresh-dependencies

自定义jar

1
2
3
dependencies {
compile files('libs/myjar.jar')
}

将本地目录中的所有jar加入依赖

1
2
3
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}

构建项目和所有它所依赖的项目

$ gradle api:model:buildNeeded

构建项目和所有依赖它的

$ gradle api:rest:buildDependents

为构建脚本提供默认任务( = gradle)

defaultTasks "clean","build"

在Gradle中使用作用域(version > gradle2.12)

1
2
3
dependencies {
compileOnly 'javax.servlet:servlet-api:3.0-alpha-1'
}

显式设置Java编译编码

在 build.gradle 中添加 compileJava.options.encoding = 'UTF-8'

禁用传递依赖关系解析

1
2
3
configurations {
compile.transitive = false
}

初始化Gradle项目

创建使用testng测试框架的Java Gradle项目
$ gradle init --type java-library --test-framework testng
创建使用JUnit测试框架的Java Gradle项目
$ gradle init --type java-library

签名文件

1
2
3
4
apply plugin: 'signing'
signing {
sign configurations.archives
}

只想在发布的版本中签名而在快照版本中不签名

1
2
3
4
apply plugin: 'signing'
signing {
required { !version.endsWith("SNAPSHOT") }
}

并行运行测试

1
2
3
test {
maxParallelForks = 2
}

为测试设置内存

1
test {minHeapSize = '512m'maxHeapSize = '1024m'}

用调试模式运行Gradle

$ gradle clean build --debug

当任务失败后继续执行任务

$ gradle clean build --continue

将Maven工程转移至Gradle

$ gradle init --type pom

强制Gradle重运行即使它是最新的

$ gradle build --rerun-tasks

启用连续构建

$ gradle test --continuous

运行一个测试事务(有时我们只需要运行一个测试事务而不是运行所有测试)

$ gradle test --tests tips.CalculatorTest

运行CalculatorTest 中的某个部分

$ gradle test --tests tips.CalculatorTest.shouldAddTwoNumbers

使用正则表达式来指定多个测试

$ gradle test --tests "tips.Calculator*Test"
$ gradle test --tests tips.CalculatorTest --tests tips.Calculator1Test

在一个子模块的测试

$ gradle api:test --tests app.api.PingResourceTest

生成源文件和java文档jar包

1
2
3
4
5
6
7
8
9
10
11
task sourcesJar(type: Jar, dependsOn: classes){   
classifier = 'sources'
from sourceSets.main.allSource
}
task javadocJar(type: Jar, dependsOn: javadoc){
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives sourcesJar, javadocJar
}

在构建脚本中访问环境变量

1
2
println(System.getenv("HOME"))
println("$System.env.HOME")

配置测试日志(Gradle默认只会在控制台打印测试错误的日志, Gradle允许你用testLogging参数来配置)

1
2
3
4
5
test {
testLogging {
events "passed", "skipped", "failed"
}
}

在测试执行期间显示标准输出和错误流

1
2
3
4
5
test {
testLogging {
events "passed", "skipped", "failed"showStandardStreams = true
}
}

存储凭据(不应该在build.gradle中硬编码凭据,而应该依靠home~/ .gradle / gradle.properties来存储凭据。

假设你想使用受凭证保护的Maven存储库。 指定凭据的一种方法是在build.gradle中对它们进行硬编码)

1
2
3
4
5
6
7
8
9
repositories {   
maven {
credentials {
username "admin"
password "admin123"
}
url "http://nexus.mycompany.com/"
}
}

更好的方法

改变自己的 ~/ .gradle / gradle.properties

1
2
3
4
5
6
7
8
9
10
11
nexusUsername = admin
nexusPassword = admin123
在build.gradle中引用
repositories {
maven {
credentials {
username "nexusUsername" password "nexusPassword"
}
url "http://nexus.mycompany.com/"
}
}

调试Java可执行应用程序

$ gradle bootRun --debug-jvm

使用本地Maven仓库

1
2
3
repositories {
mavenLocal()
}

排除传递性的依赖

1
2
3
4
compile('org.hibernate:hibernate:3.1') {
exclude module: 'cglib' //by artifact name
exclude group: 'org.jmock' //by group
}