Gradle的安装与简单使用

大二软件构造课的实验要求对项目进行build,比较了几种流行的build工具,我选择了gradle,在这里记录我安装以及配置gradle的整个过程,尽可能写的详细一些,以便日后复习,也希望可以帮到别人。

由于本人水平有限,本文难免会有不当之处,欢迎读者批评指正

安装gradle

注:这里安装的gradle版本仅是我写此文时的最新版本,gradle最新版本请见 gradle download
我使用的是ubuntu系统,所以以linux的安装过程作为示例,详细的安装指导请见 gradle install

第一步. 下载最新的安装包

安装包有两种,Complete比Binary-only中多了文档源码文件, 这里我们下载Binary-only包,文档和源码都可以在线浏览和获取

第二步. 解压安装包

我安装在了/opt/gradle目录中,也可以安装在其他目录

1
2
3
4
$ mkdir /opt/gradle
$ unzip -d /opt/gradle gradle-4.6-bin.zip
$ ls /opt/gradle/gradle-4.6
LICENSE NOTICE bin getting-started.html init.d lib media

第三步. 配置环境变量

配置环境变量让其包含gradle的bin文件

1
$ export PATH=$PATH:/opt/gradle/gradle-4.6/bin

这里的路径以你的gradle安装路径为准

遇到的问题

我在配置环境变量以后,发现某些gradle命令需要sudo权限才可以运行,而输入命令sudo gradle <command>会出现sudo: gradle: command not found的错误提示。解决方法是:

  1. 运行命令sudo vim /ect/sudoers

    这里一定要加上sudo,因为sudoers文件需要管理员权限才可以查看

  2. sudoers中找到secure_path项,在其中加入gradle的环境变量,如下所示

    gradle环境变量前面是一些系统的环境变量,环境变量与环境变量之间以:分割

1
secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/gradle/gradle-4.6/bin"
  1. vim的normal模式下输入:wq保存设置并退出

    如果不熟悉vim的用法,请参考 www.openvim.com

第四步. 检查你的安装是否正确

运行命令

1
$ gradle -v

如果出现以下内容,说明你已经成功的安装了gradle

1
2
3
4
5
6
7
8
9
10
11
------------------------------------------------------------
Gradle 4.6
------------------------------------------------------------

Build time: 2018-02-28 13:36:36 UTC
Revision: 8fa6ce7945b640e6168488e4417f9bb96e4ab46c

Groovy: 2.4.12
Ant: Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM: 1.8.0_161 (Oracle Corporation 25.161-b12)
OS: Linux 4.13.0-37-generic amd64

同时为了确定sudo gradle <command>可以执行,请输入命令

1
$ sudo gradle -v

应该得到和上面一样的输出

利用gradle对java projects进行build

我利用实验二的projects作为例子

创建Gradle Builds

  1. 进入需要build的projects目录

    1
    $ cd PATH/Lab2-XXXXXXX/
  2. 运行init命令

    1
    $ gradle init

你将会看到如下输出

1
2
3
4
5
6
:wrapper
:init
Maven to Gradle conversion is an incubating feature.

BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed

如果不行的话就在前面加上sudo

这时,projects中的目录结构如下

1
2
3
4
5
6
7
8
.
├── build.gradle
├── gradle
├── gradlew
├── gradlew.bat
├── settings.gradle
├── src
└── test

其中build.gradle就是我们需要配置的build脚本文件

其他文件的用途在官网上也给出说明,在这里我们不做详细讨论

gradle file structure

添加java插件

gradle中的java插件功能非常强大,利用它,我们甚至可以只利用一行脚本代码就可以完成项目的build,但我们实验要求的目录结构与gradle默认的目录结构不一致,所以我们还需要做一些配置

打开build.gradle文件

1
$ sudo vim build.gradle

向其中写入

1
apply plugin: 'java'

改变项目默认结构

gradle默认将源代码放在

1
2
3
4
5
6
7
src
├── main
│   └── java
│   └── java文件
└── test
└── java
└── 测试文件

而我们实验中要求的目录为

1
2
3
4
5
6
7
8
9
.
├── src
│   ├── P1
│   ├── P2
│   └── P3
└── test
├── P1
├── P2
└── P3

所以我们要做一些调整
build.gradle文件中加入

1
2
3
4
5
6
7
8
9
10
11
12
13
sourceSets {
main {
java {
srcDirs = ['src'] // java文件的目录
}
}

test {
java {
srcDirs = ['test'] // test文件的目录
}
}
}

添加依赖

由于JUnit是外部库,而我们用Eclipse运行程序的时候也是手动的将JUnit导入Eclipse中,现在要使我们的代码完全脱离Eclipse环境,除了手动的导入JUnit之外,我们可以用Gradle提供的自动添加依赖功能

定义仓库

在java中,依赖都是以JAR文件的形式发布和使用的。许多类库都可以在仓库中找到,仓库可以是一个文件系统或者一个中心服务器。Gradle要求你定义至少一个仓库来使用依赖。在这里,我们使用Maven Central仓库
build.gradle文件中添加

1
2
3
repositories {
mavenCentral()
}

声明依赖

将JUnit4添加到项目中,在build.gradle文件中添加

1
2
3
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.+'
}

配置项目属性

设置项目版本号,设置Java版本编译兼容

1
2
sourceCompatibility = 1.8 // 兼容到Java8
version = '1.0'

完整的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
apply plugin: 'java'

sourceCompatibility = 1.8
version = '1.0'

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.+'
}

sourceSets {
main {
java {
srcDirs = ['src']
}
}
test {
java {
srcDirs = ['test']
}
}
}

开始build

运行build命令

运行命令

1
$ gradle build

出现如下内容说明build成功

1
2
3
4
Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 7s
4 actionable tasks: 4 up-to-date

查看build结果

我们执行build命令后发现项目根目录中多出了一个build/文件夹,里面的内容包含着编译好的class文件和测试报告等,我们可以在build/reports/tests/test/目录中找到index.html文件,这就是gradle为我们生成的HTML形式的测试报告,打开它,内容如下
reports

利用build scan查看build结果

build scan是build的可共享、可集中式报告,它以网页形式向你展示了build的整个过程和详细信息。关于build scan的详细介绍请见Build Scan Plugin User Manual
运行命令

1
$ gradle build --scan

你会得到一个如下的链接:

1
2
3
4
BUILD SUCCESSFUL in 5s

Publishing build scan...
https://gradle.com/s/47i5oe7dhgz2c

打开它,在里面输入自己的邮箱,你会得到一封用于激活build scan的邮件,激活之后,你就可以看到自己的build scan了
scan

此图片来自gradle官网

参考文档

  1. gradle官网
  2. SDKMAN官网
  3. 《实战gradle》