我可以通过将这些 jar 文件预下载到本地来阻止 gradle 下载 jar 吗?

Can I prevent the gradle from downloading jars by pre-downloading these jar files to local?

我是 Gradle 和 Minecraft 改装的新程序员。 我尝试使用命令

设置 Minecraft forge build.gradle 文件
./gradlew genVSCodeRuns

在VSCode的命令行中。每次在下载两个所需文件的过程中失败并出现这种错误消息:

> Could not download icu4j-66.1.jar (com.ibm.icu:icu4j:66.1)
  > Could not get resource 'https://maven.minecraftforge.net/com/ibm/icu/icu4j/66.1/icu4j-66.1.jar'.
     > Premature end of Content-Length delimited message body (expected: 12,935,630; received: 6,397,856)

我以为是网络问题,尝试将需要的两个jar文件下载到本地,并保存在libs文件夹中。但是,当我在 Gradle 开始使用以下脚本自动下载它们之前尝试实施它们时,Gradle 继续下载它们。

dependencies {
    implementation fileTree(dir:'libs',includes:['*jar'])
}

我现在想知道使用这些下载的 jar 文件作为缓存并防止 build.gradle 再次下载它们的正确脚本是什么。

我查看了类似的问题,但不知道在哪里 放置我的缓存文件。只有正确放置缓存文件才能使用Gradle的离线模式构建项目

我自己想出了解决办法

目标是将下载的文件添加到本地缓存,以便 Gradle 使用此文件缓存而不是 re-downloading 来自 Internet 的文件。

在执行此操作之前,我们需要确保文件大小与所需大小相同。由于网速不好,有一次只下载了6mb,实际大小是18mb

要将其添加到本地缓存,请按照以下步骤操作。

首先,添加一个环境变量GRADLE_USER_HOME

然后,jar 文件缓存 将存储在路径:

/%GRADLE_USER_HOME%/caches/modules-2/files-2.1/$package$/$project$/$version$/$sha1$/$proj-ver.jar$/

例如,来自URL的icu4j-66.1.jar 'https://maven.minecraftforge.net/com/ibm/icu/icu4j/66.1/icu4j-66.1.jar'将存储在以下路径:

%GRADLE_USER_HOME%/caches/modules-2/files-2.1/com.ibm.icu/icu4j/66.1/$sha1$/icu4j-66.1.jar

之后,我们需要获取sha1代码。我们可以通过创建一个新任务并打印出获取的 sha1 代码,在 build.gradle 中实现 https://gist.github.com/dagezi/9594839#file-calcsha1-gradle 中的 Gradle 代码。

然后,再次运行build.gradle,自动执行缓存文件。 (无需使用离线模式)