gradle简单介绍

前言

软件开发中我们肯定需要用到很多的第三方库(依赖),最原始的操作就是自己下下来,然后使用。相信很多人肯定也这么干过,有多痛苦自己知道就行了,于是就有了管理程序,来帮助你解决这一烦恼,像python使用的pip,Node.js使用的npm,它们大多只需要一条命令就行了,那java难道没有么?那肯定是不可能的,java的依赖管理工具maven最早出现于2004年,是由Apache组织开发的,但是我们今天要聊的是另外一个依赖管理程序,由于我之前接触Android用它用的比较多,所以这里就先介绍它了。

Gradle的安装

1.下载

wget https://services.gradle.org/distributions/gradle-6.0.1-all.zip

2.安装到指定目录

mkdir /opt/gradle
unzip -d /opt/gradle gradle-6.0.1-all.zip
ls /opt/gradle/gradle-6.0.1

3.配置环境变量

export PATH=$PATH:/opt/gradle/gradle-6.0.1/bin

4.确认安装是否成功

gradle -v

简单使用

想要创建一个项目?创建一个项目文件夹,然后到其下输入gradle init,根据出现的提示进行选择好了,我这里提供一个连接数据库的例子好了,因为连接数据库肯定要下载jar包,所以拿这个作为例子挺好的。

首先第一个会让你选择项目类型,那这里选择application,然后让你选择对应的语言,我们这里当然选择java啦(如果你第一步选择了basic,那就没有让你选择语言的这一步)。第三步可能会有人会有点疑惑,选择脚本的DSL?简单来说DSL(domain-specific language)你可以理解为专门为某个特定工作而使用的语言,这里简单来说就是gradle使用的语言,选择Groovy就行了。最后会让你选择测试框架和项目名字,这个自己决定就好了。最后的项目结构如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.
├── build.gradle
├── gradle
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│   ├── java
│   │   └── GradleTest ←我自己取的项目名字
│   │   └── App.java
│   └── resources
└── test
├── java
│   └── GradleTest
│   └── AppTest.java
└── resources

下面简单来对生成的这些文件进行分析,src下面的东西想必每个学过java的都非常熟悉吧,那个App.java是系统默认生成的helloworld程序。所以src就跳过了。

build.gradle

看一下这个文件的内容:

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
26
plugins {
// Apply the java plugin to add support for Java
id 'java'

// Apply the application plugin to add support for building a CLI application.
id 'application'
}

repositories {
// Use jcenter for resolving dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}

dependencies {
// This dependency is used by the application.
implementation 'com.google.guava:guava:28.0-jre'

// Use JUnit test framework
testImplementation 'junit:junit:4.12'
}

application {
// Define the main class for the application.
mainClassName = 'GradleTest.App'
}
  • 第一部分是plugins,毫无疑问因为我们之前选择了applicationjava,所以下面有两个id分别对应了我们之前的选择。
  • 第二部分是仓库的选择,没有特别的需求一般选择jcenter作为我们的中央仓库。
  • 第三部分就是我们的依赖了,等下如果要增加数据库的依赖就需要在这里写。
  • 最后一部分指定主类,应该也很好理解。

gradle-wrapper

这个文件夹下面就一个jar包和一个属性的文件,先来看下这个属性文件里面的内容:

1
2
3
4
5
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

其中第三行还是挺有意思的,这不就是我这个版本的gradle的下载地址吗?主要原因是目前gradle还算是一个新的东西,然后正在飞快发展,有可能我这个项目用的是5.0版本的gradle,而你的项目用的是6.0版本的gradle,那岂不是我还需要手动去下载不同版本的gradle,这岂不是又回到了问题的原点?为了解决这个问题,gradle采取了这个方法,现在我虽然是5.0的项目,但是我的gradle读取了6.0的这个文件,然后它会自动去下载(当然会先去本机找有没有已经下好的)对应版本的gradle,就不用你担心了。

其余的四行也非常好理解,如果你配置了GRADLE_USER_HOME,gradle就会把自己的每个版本都放到其下的wrapper/dists中,但是一般默认是放到用户对应的目录的.gradle中,下面是我的windows下面的截图:

1576120554517

gradlew和gradlew.bat

显然gradlew.bat就是为了在windows下面使用的,所以这俩本质上是一个东西,只是为了在不同的平台上使用而已。而gradlew是一个可执行文件,试着去运行一下,结果发现它自动去下载gradle-wrapper.properties里面指定的版本的那个gradle了。所以这个程序的作用就是为你下载指定的gradle。

settings.gradle

看了一眼里面的内容,就一句话,规定了根项目的名字….就没了

所以gradle的文件内容其实还算简单,也非常好理解,是我喜欢的逻辑类型。

build一个项目

现在已经对这些文件进行了一波基础的分析,然后也有了gradle为我们自动生成的helloworld文件,那么我们就可以运行这个项目了。

输入gradle build或者找到刚刚的gradlew来运行./gradlew build(推荐后者),这样它就会帮你去下载好你需要的一切,在这个例子中是GuavaJUnit,它们会被放到~/.gradle/caches目录下面

如果你是第一次运行,那么它会先去下载gradle并且放到~/.gradle/wrapper/dists目录里面,所以如果你觉得自动下载速度真的太慢,可以自己去下载,然后解压缩后丢进去即可。

然后它会编译你的类、运行测试并且生成测试报告,此时你会发现新增加了一个文件夹,叫build,而测试报告会放在build/reports/tests/test/index.html

Run一个项目

./gradlew tasks && ./gradlew run

一个连接数据库的demo

运行一个helloworld显然是非常简单的,现在用一个连接数据库的例子来见识一下gradle的方便之处吧。

首先编辑一下build.gradle文件,在其中添加连接数据库的依赖implementation ("mysql:mysql-connector-java:5.1.24"),然后运行./gradlew build下载好依赖。

下载完之后我们再去src下面,和之前那个输出helloworld的app.java同级的地方创建一个java文件,我这里就叫JdbcDemo.java,然后里面的内容就是简单连接一下数据库:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package GradleTest;

import java.sql.DriverManager;
import java.sql.*;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JdbcDemo {

static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
}

public static Connection getConnection() {

String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "123456";

Connection con = null;

try {
con = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}

return con;
}

public void query() {

String sql = "select * from COMPANY";
Connection con = getConnection();
Statement stm = null;
ResultSet rs = null;

try {
stm = con.createStatement();
rs = stm.executeQuery(sql);
System.out.println("查询结果为:");
while (rs.next()) {
String user_name = rs.getString("name");
System.out.println(user_name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(rs,stm,con);
}
}

}

然后只需要去./gradlew build然后再./gradlew run即可看到查询结果了。