本文小编为大家详细介绍“Java构建工具gradle怎么安装使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java构建工具gradle怎么安装使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
学习Java
的同学,相信你们都用过Maven
这个经典实用的项目构建工具。但是假如你经常使用Maven
的话,你或许会发现Maven
一些让人不太舒服的地方:
一来
Maven
的配置文件是XML
格式的,假如你的项目依赖的包比较多,那么XML
文件就会变得非常非常长;二来
XML
文件不太灵活,假如你需要在构建过程中添加一些自定义逻辑,搞起来非常麻烦;第三就是
Maven
非常的稳定,但是相对的就是对新版java
支持不足,哪怕就是为了编译java11
,也需要更新内置的Maven
插件。
如果你对Maven
的这些缺点也有所感触,准备尝试其他的构建工具,那么你可以试试gradle
,这是一个全新的java
构建工具,解决了Maven
的一些痛点。
安装gradle
最传统的安装方法就是去gradle
官网下载二进制包,解压,然后将路径添加到环境变量中。如果你没什么其他需求,可以使用这种安装方式。但是,gradle
是一个非常新潮的项目,每隔几个月就会发布一个新版本,这种方式可能跟不上gradle
的更新速度。
所以我更加推荐使用包管理器来安装gradle
。如果你使用linux
系统,那么不必多说。如果你使用Windows
系统,我推荐使用scoop
包管理器来安装gradle
。它安装方便,而且使用SHIM
目录来管理环境变量,在各种工具中配置gradle
也很方便。
当然,如果你完全不喜欢安装这么多乱七八糟的东西,那也可以使用gradle
。gradle
提供了一个名为gradle wrapper
的工具,可以在没有安装gradle
的情况下使用gradle
。好吧,其实它就是个脚本文件,当你运行wrapper
脚本的时候,如果脚本发现你电脑里没有gradle
,就会自动替你下载安装一个。现在甚至还出现了Maven wrapper
,也是个脚本文件,可以自动安装Maven
。
之前相信一些朋友听说过gradle
,然后尝试使用它,结果因为速度太慢,最后放弃了。之前我也因为gradle
的速度,放弃了它一段时间。不过现在使用gradle
的话会方便很多。gradle
官方在中国开设了CDN
,使用gradle wrapper
的时候下载速度非常快。可以说现在是一个学习使用gradle
的好时候。
使用gradle wrapper
这里我使用的IDEA
来创建和使用gradle
项目。
IDEA
默认就会使用gradle wrapper
来创建项目,所以无需安装gradle
也可以正常运行。这时候项目结构应该类似下图所示,使用Maven
的同学应该比较熟悉,因为这和Maven
的项目结构几乎完全一致。gradle
文件夹和gradlew
那几个文件就是gradle wrapper
的文件,而.gradle
后缀名的文件正是gradle
的配置文件,对应于Maven
的pom.xml
。
gradle wrapper
的优点之一就是可以自定义下载的gradle
的版本,如果是团队协作的话,这个功能就非常方便,简单设置即可统一团队的构建工具版本。这里我就设定成目前最新的gradle 6.4
.默认下载安装的是bin
版,仅包含二进制。如果你使用IDEA
的话,它会推荐下载all
版,包含源代码,这样IDEA
就可以分析源代码,提供更加精确的gradle
脚本支持。
依赖管理
下面来看看gradle
的依赖管理功能,这也算是我们使用构建工具的主要目的之一了。这点也是gradle
相较maven
的优势之一了。相较于maven
一大串的XML
配置,gradle
的依赖项仅需一行。
dependencies { testImplementation 'junit:junit:4.13' implementation 'com.google.code.gson:gson:2.8.6'}
这里推荐一下Jetbrains
的package search
网站,是寻找maven
和gradle
依赖包的最佳网站,可以非常轻松的搜索和使用依赖项。
gradle
依赖的粒度控制相较于Maven
也更加精细,maven
只有compile
、provided
、test
、runtime
四种scope
,而gradle
有以下几种scope
:
implementation,默认的
scope
。implementation
的作用域会让依赖在编译和运行时均包含在内,但是不会暴露在类库使用者的编译时。举例,如果我们的类库包含了gson
,那么其他人使用我们的类库时,编译时不会出现gson
的依赖。api,和
implementation
类似,都是编译和运行时都可见的依赖。但是api
允许我们将自己类库的依赖暴露给我们类库的使用者。compileOnly和runtimeOnly,这两种顾名思义,一种只在编译时可见,一种只在运行时可见。而
runtimeOnly
和Maven
的provided
比较接近。testImplementation,这种依赖在测试编译时和运行时可见,类似于
Maven
的test
作用域。testCompileOnly和testRuntimeOnly,这两种类似于
compileOnly
和runtimeOnly
,但是作用于测试编译时和运行时。
通过简短精悍的依赖配置和多种多样的作用与选择,Gradle
可以为我们提供比Maven
更加优秀的依赖管理功能。
gradle的任务和插件
gradle
的配置文件是一个groovy
脚本文件,在其中我们可以以编程方式自定义一些构建任务。因为使用了编程方式,所以这带给了我们极大的灵活性和便捷性。打个比方,现在有个需求,要在打包出jar
的时候顺便看看jar
文件的大小。在gradle
中仅需在构建脚本中编写几行代码即可。而在Maven
中则需要编写Maven
插件,复杂程度完全不在一个水平。
当然,Maven
发展到现在,已经存在了大量的插件,提供了各式各样的功能可以使用。但是在灵活性方面还是无法和Gradle
相比。而且Gradle
也有插件功能,现在发展也十分迅猛,存在了大量非常好用的插件,例如gretty
插件。gretty
原来是社区插件,后来被官方吸收为官方插件,可以在Tomcat
和jetty
服务器上运行web
项目,比Maven
的相关插件功能都强大。
虽然gradle
可以非常灵活的编写自定义脚本任务,但是其实一般情况下我们不需要编写构建脚本,利用现有的插件和任务即可完成相关功能。在IDEA
里,也可以轻松的查看当前gradle
项目中有多少任务,基本任务如build
、test
等Maven
和Gradle
都是相通的。
配置镜像
Maven
官方仓库的下载速度非常慢,所以一般我们要配置国内的镜像源。gradle
在这方面和Maven
完全兼容,因此只需稍微配置一下镜像源,即可使用Maven
的镜像。如果你用gradle
构建过项目,应该就可以在用户目录的.gradle
文件夹下看到gradle
的相关配置和缓存。
之前wrapper
下载的gradle
也存放在该文件夹下,位置是wrapper/dists
。
而依赖的本地缓存在caches\modules-2\files-2.1
文件夹下。目录结构和Maven
的本地缓存类似,都是包名+版本号的方式,但是gradle
的目录结构最后一层和Maven
不同,这导致它们无法共用本地缓存。
言归正传,在gradle
中配置下载镜像需要在.gradle
文件夹中直接新建一个init.gradle
初始化脚本,脚本文件内容如下。这样一来,gradle
下载镜像的时候就会使用这里配置的镜像源下载,速度会快很多。再加上gradle wrapper
在中国设置了CDN
,现在使用gradle
的速度应该会很快。
allprojects { repositories { maven { url "https://maven.aliyun.com/repository/public" } maven { url "https://maven.aliyun.com/repository/jcenter" } maven { url "https://maven.aliyun.com/repository/spring" } maven { url "https://maven.aliyun.com/repository/spring-plugin" } maven { url "https://maven.aliyun.com/repository/gradle-plugin" } maven { url "https://maven.aliyun.com/repository/google" } maven { url "https://maven.aliyun.com/repository/grails-core" } maven { url "https://maven.aliyun.com/repository/apache-snapshots" } }}
当然,如果你有代理的话,其实我推荐你直接为gradle
设置全局代理。因为gradle
脚本实在是太灵活了,有些脚本中可能依赖了github
或者其他地方的远程脚本。这时候上面设置的下载镜像源就不管用了。
所以有条件还是干脆直接使用全局代理比较好。设置方式很简单,在.gradle
文件夹中新建gradle.properties
文件,内容如下。中间几行即是设置代理的配置项。当然其他几行我也建议你设置一下,把gradle
运行时的文件编码设置为UTF8
,增加跨平台兼容性。
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8systemProp.http.proxyHost=127.0.0.1systemProp.http.proxyPort=10800systemProp.https.proxyHost=127.0.0.1systemProp.https.proxyPort=10800systemProp.file.encoding=UTF-8org.gradle.warning.mode=all
为什么使用gradle?
看到这里,你应该对gradle
有了基本的了解, 也可以将其用于你的项目之中。但是如果你Maven
已经非常熟悉了,可能不太愿意使用gradle
,因为貌似没有必要。但是既然gradle
出现了,就说明有很多人对Maven
还是有一定的意见。因此在这里我来总结一下gradle
相比maven
的优势。
1.速度
gradle
使用构建缓存、守护进程等方式提高编译速度。结果就是gradle
的编译速度要远超maven
,平均编译速度比Maven
快好几倍,而且项目越大,这个差距就越明显。
2.灵活性
gradle
要比Maven
灵活太多,虽然有时候灵活并不是一件好事情。但是大部分情况下,灵活一点可以极大的方便我们。Maven
死板的XML
文件方式做起事情来非常麻烦。很多Maven
项目都通过执行外部脚本的方式来完成一些需要灵活性的工作。而在gradle
中配置文件就是构建脚本,构建脚本就是编程语言(groovy编程语言),完全可以自给自足,无需外部脚本。
3.简洁性
完成同样的功能,gradle
脚本的长度要远远短于maven
配置文件的长度。虽然很多人都说XML
维护起来不麻烦,但是我觉得,维护一个光是依赖就有几百行的XML
文件,不见得就比gradle
脚本简单。
也许是因为我上面说的原因,也许有其他原因,不得不承认的一件事情就是gradle
作为一个新兴的工具已经有了广泛的应用。spring
等项目已经从Maven
切换到了gradle
。开发安卓程序也只支持gradle
了。因此不管是否现在需要将项目从maven
切换到gradle
,但是至少学习gradle
是一件必要的事情。
读到这里,这篇“Java构建工具gradle怎么安装使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。