在使用 Gradle 或者 Maven 新建或导入项目时,默认是从直接从国外的站点下载所需的依赖,有时候会因网络的问题,导致项目依赖下载缓慢,IDEA 弄了半天还没有导入项目(手动裂开)。
Gradle 下载速度慢有两个方面,在网络条件不好的时候都是让人爆炸的存在:
这个很迷,有时候用浏览器直接下载挺快的,但在 IDEA 中老半天了都还没有下载下来。遇到项目的 Gradle 二进制包下载很慢很慢,可以直接去官网下载。如果直接用浏览器下载也很慢的话,可以使用类似迅雷的工具,顶快的。不过网络条件比较好的话,这步可以忽略,毕竟导入项目的时候 IDEA 自动会搞定。
Gradle 二进制包下载地址 https://services.gradle.org/distributions/
下载后的二进制包直接放到,用户主目录/.gradle/wrapper/dists
(对于 Win、Mac、Linux 是一样的)。
举个栗子:例如 gradle-6.5-all.zip ,先清空用户主目录/.gradle/wrapper/dists/gradle-6.5-all/2oz4ud9k3tuxjg84bbf55q0tn/
这个文件夹中的文件,然后将自己下载的压缩包复制粘贴到这里就可以了,IDEA 使用的时候会自动解压。
如果像 2oz4ud9k3tuxjg84bbf55q0tn
这个奇奇怪怪的文件夹名没有生成的话:
public class Gradle {
public static void main(String[] args) throws NoSuchAlgorithmException {
// gradle-wrapper 文件定义的 Gradle 下载地址的 distributionUrl
String url = "https://services.gradle.org/distributions/gradle-6.5-all.zip";
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(url.getBytes());
// 在用户主目录下存储 gradle 的文件夹名称
String folderName = new BigInteger(1, digest.digest()).toString(36);
// 位置在 $HOME_PATH/.gradle/wrapper/dists/gradle-版本号-all/folderName
// 如果是 gradle-版本号-bin.zip 版本的 Gradle,则是 $HOME_PATH/.gradle/wrapper/dists/gradle-版本号-bin/folderName
System.out.println(folderName);
// 结果 2oz4ud9k3tuxjg84bbf55q0tn
}
}
对于使用 Spring Initializr 来说,今天可能使用了 Gradle 这个版本,明天又可能使用那个版本的代码。久而久之会因不同项目 Gradle 版本的不同,然后在用户主目录/.gradle
文件夹疯狂塞满各种版本的 Gradle 包。
使用 Gradle Wrapper
Gradle Wrapper 是对 Gradle 做一层封装,目的是方便协作开发过程中统一各个成员的 Gradle 版本。
Gradle 默认使用项目文件夹下的 gradle/wrapper/gradle-wrapper.properties
这个配置文件指定版本,如果没有直接新建这个文件,复制下方的配置即可。
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
# 修改 distributionUrl 指定 Gradle 的版本
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Gradle Wrapper 还有两个重要的文件分别是:gradlew 和 gradlew.bat,前者是 Unix/Linux 的 sh 脚本,后者是 Windows 下的 bat 脚本,都是为了方便在命令行中使用 gradle 的命令行工具。如果项目中没有这个文件的话,可以通过下面的命令或者在 IDEA 运行一下:
# 这个方法需要将 Gradle 的 bin 目录添加到 PATH,Windows 是 gradle.bat
gradle wrapper
在 IDEA 双击一下
通过 IDEA 设置
打开 IDEA 的设置,将设置修改如下图所示,但这个不推荐,设置只对当前项目生效。
Gradle 使用国内镜像就比较简单了,只需要在 repositories 中添加国内镜像源就行了。
全局生效的配置
打开或者新建这个文件:用户主目录/.gradle/init.gradle
注意要在 allprojects 下
allprojects { // 注意要 allprojects 下
repositories {
// 全局生效,优先级高于 build.gradle,增加下面一项使用国内镜像源
maven { url 'https://maven.aliyun.com/repository/public/' }
mavenLocal()
}
}
只对当前项目生效的配置
打开项目的 build.gradle
文件,增加使用国内镜像源代码即可
// 单模块项目
repositories {
// 当前项目生效,增加下面一项镜像源即可
maven { url 'https://maven.aliyun.com/repository/public/' }
mavenCentral()
}
// 如果是多模块的 Gradle 项目,则使用下面的配置,注意要 allprojects 下
allprojects {
repositories {
// // 当前项目生效,增加下面一项镜像源即可
maven { url 'https://maven.aliyun.com/repository/public/' }
}
}
IDEA 的 Maven 插件集成 Maven 二进制包了,如果要使用指定版本的 Maven,可以到 Maven官网 http://maven.apache.org/download.cgi 下载,解压到本地目录,然后在 IDEA 设置 Maven Home 到解压目录即可,这个是全局生效的。
虽然不怎么喜欢 Maven 的 XML 配置,但现在还是挺多 Java 项目使用 Maven 的。Maven 依赖下载加速同样跟 Gradle 一样使用阿里云的 Maven 镜像。
全局生效的配置
打开 Maven Home/conf/settings.xml
或在 IDEA 设置的 “ User settings file” 这个文件,
<mirrors>
<mirror>
<id>aliyunmavenid>
<mirrorOf>*mirrorOf>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
mirror>
mirrors>
只对当前项目生效
打开项目的 pom.xml 文件,添加如下的内容。
<repositories>
<repository>
<id>aliyunmavenid>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
repository>
repositories>
Gradle、Maven 设置国内镜像的方法对于公司内部的 Maven 镜像是同样有效的。
哈哈哈,Gradle、Maven 项目依赖下载速度慢的问题给解决了,那么怎么来查找项目所需的依赖呢?
支持多种构建工具 Maven、Gradle、SBT 等,只需鼠标轻轻一点,就可以在项目中粘贴了。而且这个网站的搜索功能方面的体验我感觉在同类工具中体验最好的(觉得最好用,但国内 IP 访问每次都要验证我不是机器人。。。)
mvnrepository 网址 https://mvnrepository.com/
同样也是支持多种构建工具,但感觉搜索方面的体验不如 mvnrepository 。
search.maven 网址 https://search.maven.org/
直接在 IDEA 中,不需要专门打开浏览器,支持 Maven、Gradle。
选择自己所需的版本之后,鼠标点击一下自动添加到 pom.xml 或 build.gradle,但感觉搜索体验有待改进。
以上就是一点实用的小技巧,让你的 Gadle 、Maven 更好用。毕竟有时候真的很迷,在网络带宽很不错的情况下,下载个依赖楞是半天没有下载下来。
哈哈,前几天的刚经历的事情,Kafka 源码导入家里的电脑很快搞定,在公司网络带宽更高的情况下竟然弄了老半天依赖还没有下载完成,明明在 build.gradle 设置了啊,郁闷的我一顿排查才发现是设置错了,家里的电脑设置 init.gradle ,所以直接使用国内的镜像源。
另外,在项目中可能也不止使用 Maven Central 这一个镜像源,对于像 Spring 等镜像源,阿里云也提供了镜像服务,设置和上面设置镜像源的步骤一样。根据项目实际情况设置即可。
阿里云镜像官网 https://maven.aliyun.com/mvn/guide