原文:不好意思, Maven 该换了!
maven 之痛点:
相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具。但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服:
gradle作为一个新兴的工具已经有了广泛的应用,相比maven,它有以下优点:
最传统的安装方法就是去gradle官网下载二进制包,解压,然后将路径添加到环境变量中。如果你没什么其他需求,可以使用这种安装方式。但是,gradle是一个非常新潮的项目,每隔几个月就会发布一个新版本,这种方式可能跟不上gradle的更新速度。
所以我更加推荐使用包管理器来安装gradle。如果你使用linux系统,那么不必多说。如果你使用Windows系统,我推荐使用scoop包管理器来安装gradle。它安装方便,而且使用SHIM目录来管理环境变量,在各种工具中配置gradle也很方便。
如果你不喜欢安装这么多乱七八糟的东西,gradle提供了一个名为gradle wrapper的工具,其实它就是个脚本文件,当你运行wrapper脚本的时候,如果脚本发现你电脑里没有gradle,就会自动替你下载安装一个。现在甚至还出现了Maven wrapper,也是个脚本文件,可以自动安装Maven。
之前很多朋友尝试使用gradle,结果因为速度太慢,最后放弃了。不过现在使用gradle的话会方便很多。gradle官方在中国开设了,CDN,使用gradle wrapper的时候下载速度非常快。可以说现在是一个学习使用gradle的好时候。
当我们使用IDEA来创建gradle项目的时候,IDEA会默认使用 gradle wrapper 来创建新项目,因此无需提前安装好 gradle 。
IDEA 推荐下载 all 版本,而非仅包含 bin 的二进制版本。因为all 版包含源代码,这样IDEA可以分析源代码,提供更加精确的gradle脚本支持。在 gradle 项目下的 gradle-wrapper.properties 文件中,设置distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
,注意最后是 -all.zip,而不是 -bin.zip。
gradle 项目的目录结构和 maven项目的几乎完全一致。
项目中的 gradle 文件夹和 gradlew.bat 文件,是gradle wrapper 的相关文件。
扩展名为 .gradle 的两个文件:build.gradle 和 settings.gradle 文件,是gradle的配置文件。对应于 maven 的 pom.xml。
.gradle 文件夹下会保存之前使用过的下载的各个版本的gradle,在wrapper/dists中。还会保存之前构建项目时的配置和依赖项的本地缓存,在cahces/modules-2/files-2.1 文件夹中。
gradle wrapper 的优点:
gradle 依赖项的scope 相较于 maven 更加精细
可以直接使用maven 的仓库,因此也可以使用maven的镜像。
在C:\Users< your-user-name >.gradle 文件夹下创建一个 init.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"
}
}
}
更好的方式是配置全局代理:在C:\Users< your-user-name >.gradle 文件夹下,新建 gradle.properties 文件,做以下配置:
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10800
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=10800
systemProp.file.encoding=UTF-8