Gradle 是什么?
Gradle™ 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化建构工具。它使用一种基于
Groovy 的特定领域语言来声明项目设置,而不是传统的 XML。当前其支持的语言限于 Java 、Groovy 和 Scala ,计划未来将支持更多的语言。 — wikipedia.org
特性
DSL 声明项目的配置,更加直观
细粒度的传递依赖管理
增量编译
高效的内存执行
环境搭建
安装 Gradle
Windows
在 Gradle 的下载页面 ,下载 gradle-5.4.1-all.zip 文件,解压至
D:\apps\gradle
,并添加环境变量 PATH=D:\apps\gradle\gradle-5.4.1\bin
Mac
1 2
$ brew install gradle $ brew upgrade gradle
验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 检查是否安装成功 $ gradle -v ------------------------------------------------------------ Gradle 5.4.1 ------------------------------------------------------------ Build time: 2019-04-26 08:14:42 UTC Revision: 261d171646b36a6a28d5a19a69676cd098a4c19d Kotlin: 1.3.21 Groovy: 2.5.4 Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018 JVM: 11.0.4 (Oracle Corporation 11.0.4+10-LTS) OS: Mac OS X 10.14.6 x86_64
Gradle 代理设置
1 2 3 4 5 6 7 8 9 10
$ gradle xxx -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080 # 或者修改 gradle.properties 配置文件 $ vim gradle.properties systemProp.http.proxyHost=192.168.1.101 systemProp.http.proxyPort=8080 systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost systemProp.https.proxyHost=192.168.1.101 systemProp.https.proxyPort=8080 systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost
如果在 Kafka 源码目录下修改的 gradle.properties 无法生效,可以直接拷贝到 ~/.gradle 目录下
编译源码
1 2 3 4 5 6 7 8
# 下载依赖 $ gradle # 增加 `-x test` 参数,可跳过单元测试 $ gradle -x test # 随后,生成可以用 Intellij Idea 打开的工程 $ gradle idea
如果 Gradle 的配置文件里面,没有设置 idea 插件,导致项目模块无法被识别。则需要删除 .idea 文件夹,并以 build.gradle 打开为项目,即可
实战技巧
不同的项目使用的 Gradle 版本不一致
可以使用 ./gradlew
包装器,就可以避免使用本地安装的 Gradle。Gradlew 会根据项目各自指定的 Gradle 版本进行下载,确保和项目要求的编译环境一致。常用命令如下:
运行单元测试时,报错 No Class Found
修改 Build and run using
和 Run tests using
两个选项为 Gradle
(默认为
IntelliJ IDEA
)
(对
IntelliJ IDEA ™ 的截图)
并发执行任务
1 2 3 4 5 6
# 修改配置文件 $ vim gradle.properties org.gradle.parallel=true # 执行任务时指定参数 $ ./gradlew <task> --parallel
1 2 3 4
# 清理所有的 IDEA 配置文件 $ ./gradlew cleanIdea # 生成 IDEA 配置文件 $ ./gradlew idea
加载本地 jar
1 2 3 4 5 6
// 加载单个 jar 包 dependencies { compile files('libs/yuzhouwan.jar' ) } // 加载多个 jar 包 dependencies { compile fileTree(dir: 'libs' , include: ['*.jar' ]) } dependencies { compile fileTree(dir: 'libs' , include: ['yuzhouwan.jar' ]) }
资料
Doc
Blog
Github