Gradle wrapper 使用国内镜像的那点事
文章目录
Gradle wrapper 这东西不知道什么时候,下载被迁移到了 Github 的 release 里,下载速度骤降,曾几何时 Gradle 团队还高调宣布国内 CDN,现在看来 Gradle 团队也降本增效了。
解决方案有如下几种,具体使用什么方式,要看你自己的情况。
直接替换 url
这种情况适用于项目是内部项目或者都是国内人员参与的项目。
替换方式为直接替换 gradle/wrapper/gradle-wrapper.properties
下的 url 到国内镜像即可,
比如 https://mirrors.cloud.tencent.com/gradle/gradle-8.5-all.zip
。
使用代理
自备
不能替换的情况
比如某个项目是开源项目,你需要上传到 github,那你就不应该这么做了,你不能假定使用者都是国内的人。 这种情况下可能就需要研究下正常情况下是放在哪里的了。
主要方式就是自行下载并复制到对应文件夹下。
默认情况下,每个版本的 Gradle wrapper 会在 $GRADLE_HOME/wrapper/dists/{version}/{hash}
下
这个 version 是包含类型的,例如 gradle-7.4-all ,是包含 -all 后缀的。
然后 hash 则是 md5 后的 base36,生成方法在
1
2 /**
3 * This method computes a hash of the provided {@code string}.
4 * <p>
5 * The algorithm in use by this method is as follows:
6 * <ol>
7 * <li>Compute the MD5 value of {@code string}.</li>
8 * <li>Truncate leading zeros (i.e., treat the MD5 value as a number).</li>
9 * <li>Convert to base 36 (the characters {@code 0-9a-z}).</li>
10 * </ol>
11 */
12 private String getHash(String string) {
13 try {
14 MessageDigest messageDigest = MessageDigest.getInstance("MD5");
15 byte[] bytes = string.getBytes();
16 messageDigest.update(bytes);
17 return new BigInteger(1, messageDigest.digest()).toString(36);
18 } catch (Exception e) {
19 throw new RuntimeException("Could not hash input string.", e);
20 }
21 }
其实这样,我们只需要根据 url 替换,并帮它完成下载步骤即可,写个工具即可。
工具在下面自取。