构建工具Gradle安装和简单使用
1. 安装
到gradle官网下载页 https://gradle.org/gradle-download/ 下载gradle,其中“完全版(Complete distribution)”包含除了运行程序外,还有源代码和重要的离线文档,不过如果你的网络很好,不在意文档是否需要离线或者更偏好在线文档,那可选择“二进制(Binary only distribution)”版,该下载文件包里仅有运行时库。“source code”文件包仅包含gradle源代码。
下载完成后,解压到某个程序安装目录,这里是/usr/lib/:
sudo unzip ~/Downloads/gradle-2.14.1-all.zip -d /usr/lib/
做个软链接:
cd /usr/lib/ sudo ln -s gradle-2.14.1 gradle
配置环境变量GRADLE_HOME及PATH:
编辑~/.bashrc或/etc/profile(效果会有细微差别,如果单用户尽量配置到~/.bashrc,如果是多用户且不希望为其他用户重复配置,选择/etc/profile),加入以下脚本语句:
export GRADLE_HOME="/usr/lib/gradle/" export PATH="$GRADLE_HOME/bin/:$PATH"
保存后source配置文件,之后变量就生效了:
source /etc/profile source ~/.bashrc echo $GRADLE_HOME
如果是配置到/etc/profile的,退出当前终端后再打开新的终端可能发现变量无效了,需要注销当前用户,重新登陆,之后打开的终端就能使用刚才设置的变量(若想知道原因,可通过关键字“登陆shell、非登陆shell”了解)。
测试gradle命令是否能使用:
gradle -v
2. 使用
构建工具两大主要功能是构建和依赖管理,对于使用IDE开发环境的使用者来说,主要使用依赖管理功能。
gradle是通过读取配置文件(主要是项目下的build.gradle),然后使用插件来完成构建任务的。
命令行构建新Java项目Hello World
gradle有一些自带的标准插件,可直接使用,无需额外下载安装,其中java和scala的插件就如其名,分别为'java'和'scala'。
从命令行新建一个java项目并编译的过程如下:
mkdir gradle-demo cd gradle-demo vim build.gradle
写入以下内容后保存:
apply plugin:'java'
标准java插件默认的java源文件根目录是src/main/java/,可在build.gradle中加入语句更改源文件存储目录:
本次示例使用默认目录(也就说没有加入以上配置)。
mkdir -p src/main/java/ vim src/main/java/App.java
编写hello world程序:
保存退出。
编译Java源代码:
gradle build
在项目目录下多出一个build文件夹,其下有classes/main文件夹,作为保存main source set生成的java class文件用,进入之,而后运行App:
cd build/classes/main/
java App
3. 依赖管理
灵活的依赖管理,支持多种形式的依赖,这是gradle的亮点,也是我由maven转为maven+gradle方式的原因之一。
如果使用IDE(如IntelliJ Idea)进行开发,那gradle的命令行使用就不是被关注的焦点了,这时依赖管理更受使用者关注。之前一般使用maven作为构建工具,偶尔会复制一些非maven库中的jar到项目的某个文件夹(如libs或lib)作为额外的依赖jar包,为满足这种需求要在build.gradle中加入依赖配置。
3.1. 依赖maven库
加入本地maven依赖jar包需要加入如下配置(确保你已安装并配置好了maven,没有与gradle相关的maven配置需要做,也就说之前若已在使用maven的不需要任何事):
如果本地maven仓库不在~/.m2/repository/(Windows下对应%USERPROFILE%\.m2\repository\),需要正确配置~/.m2/settings.xml中的本地maven仓库配置,因为M2_HOME或MAVEN_HOME/conf/settings.xml中的可能失效。也可在每个项目的build.gradle中指定本地maven仓库,通过一下配置语句实现:
maven {
url uri('/usr/share/mvn-repo/')
}
当然也可以使用在线的maven仓库,gradle可以自动下载到本地,可问题是gradle不会像maven一样规矩地放到本地maven仓库,导致不方便maven工具重用和管理jar包,我常用做法是用mvn dependency:copy -Dartifact=g:a:v命令下载jar包到本地,让gradle只使用本地maven仓库。
在线maven仓库依赖配置:
通过下图中的配置告诉gradle本项目依赖于common-io:
一个依赖(dependency)有几个属性,常用的有group、artifact、version,对于maven的依赖这三者都需要,对其他如faltDir的依赖,只需artifact。
3.2. 依赖项目/lib文件夹jar包
通过上图中的配置告诉gradle在项目/lib, lib2/文件夹中寻找依赖包,以下图中的方式告诉gradle本项目依赖于kk包。
compile ':kk:1.1'语句中group为空串,artifact为kk,version为1.1,而gradle会匹配任何version的kk,如在本项目中,文件布局如下:
build.gradle文件内容如下:
其中kk.jar(复制dom4j包改名的)中没有version信息,而仍匹配上了compile ':kk:1.1'。如果用的是IntelliJ Idea集成开发环境,可以在Gradle窗口中点击刷新图标以更新build.gradle中的配置。打开Gradle窗口的方式是悬浮指针左下角的小灰色图标上,而后点击弹出的Gradle菜单项,如下图:
刷新按钮的图标如下图中的第一个两个箭头围起来的圆圈: