【问题标题】:Why Intellij IDEA imports gradle project with old wrapper version?为什么 Intellij IDEA 使用旧包装器版本导入 gradle 项目?
【发布时间】:2019-11-12 11:05:03
【问题描述】:

我对 intellij idea 中的 gradle wrapper 版本有疑问。当我导入一个项目时,它开始下载旧版本的 gradle 和 gradle wrapper

在我的系统变量中,我的 gradle home 看起来像这样:

并且在系统变量的路径中:

我的 gradle 构建文件如下所示:

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.41'
}

group 'com.epam.trykotlin'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

task wrapper(type: Wrapper) {
    gradleVersion = '5.6.4'
}

.idea 文件夹中的 gradle.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="gradleHome" value="C:/Gradle/gradle-5.6.4" />
        <option name="gradleJvm" value="11" />
        <option name="modules">
          <set>
            <option value="$PROJECT_DIR$" />
          </set>
        </option>
        <option name="useQualifiedModuleNames" value="true" />
      </GradleProjectSettings>
    </option>
  </component>
</project>

我已经尝试删除 .gradle 文件夹和 .IdeaIC2019.2 文件夹,但我遇到了同样的问题。为什么会这样?如何修复?我也尝试重新安装 IDE,它安装了 5.2.1 版本的 gradle 插件。为什么?

【问题讨论】:

    标签: gradle intellij-idea


    【解决方案1】:

    在您的特定用例中,您可能首先 - 在 IntelliJ 之外 - 在终端窗口中运行 gradle wrapper,以便 Gradle 使用构建文件中指定的版本为项目设置包装器。

    但是,IntelliJ 似乎是硬编码的,可以为所有新项目和所有打开的项目下载 Gradle 包装器 5.2.1,而这些项目之前没有进行任何不同的配置。

    似乎没有任何方法可以禁用这种非常奇怪的行为。这是可悲的,几乎令人难以置信。这不仅会窃取用户的 Internet 带宽和磁盘空间,而且还会在开发人员继续调试他的项目设置并摸索到底为什么会发生这种情况时造成严重的混乱和时间浪费。

    我没有坚持足够长的时间来弄清楚 IntelliJ 是否会使用他下载的旧版本的 Gradle,而不是使用我已经安装的最新 Gradle 版本。当然,这真的不会让我感到惊讶。

    所以你的问题为什么的答案必须是“一个设计不佳的 Gradle 插件,由自称为开发人员的,他们早就忘记了他们为谁工作”。

    我们需要做的第一件事是停止极其烦人的下载。

    但是,我没有骗你,只有在我完成以下非常繁重的过程中的每一步后,我才能成功中止下载。在这些步骤中的任何一个上作弊都不会停止下载。尽管其中许多步骤表面上似乎没有影响,但每个步骤确实都有未公开的副作用,最终导致下载成功终止。

    • 当您第一次创建或打开项目时,有一个弹出窗口善意地表明 IntelliJ 出于未知原因正在将随机二进制文件下载到您计算机上的未知位置。点击“取消”。取消按钮将显示为灰色,但当然不会取消任何内容。
    • 点击“背景”。这将关闭弹出窗口。
    • 单击左下角的方形和红色“停止”按钮。当然,这并不能阻止任何事情。
    • 点击顶部菜单; “文件 - 关闭项目”。这会关闭主应用程序窗口,我们会返回到一个小窗口,该窗口现在在左侧列出了我们的项目。
    • 关闭此窗口。 IntelliJ 会弹出一个警告:“你有后台任务正在运行。你确定要停止它们并退出 IntelliJ IDEA 吗?”
    • 在此弹出窗口中单击“退出”。

    然后,我们需要删除放在我们磁盘上的垃圾 IntelliJ。在我的机器上:

    rm -r ~/.gradle/wrapper/dists/gradle-5.2.1-bin/
    

    现在,我们可以打开 IntelliJ 并直接进入我们的项目,而无需开始任何 Gradle 下载。

    但是,我希望 IntelliJ 使用我已安装的 Gradle。所以我打开项目并使用菜单打开“文件 -> 设置 -> 构建、执行、部署 -> 构建工具 -> Gradle”。在那里我执行以下操作:

    • 构建和运行使用:Gradle
    • 使用:Gradle 运行测试
    • 使用 Gradle 来自:Specified location /usr/lib/gradle/default

    当然,对于我们希望创建和/或打开的每个新项目,都必须重复上述所有操作。

    【讨论】:

    • 谢谢,rm -r ~/.gradle/wrapper/dists/gradle-5.2.1-bin/ 设置我的版本对我帮助很大!
    【解决方案2】:

    包装器版本在gradle\wrapper\gradle-wrapper.properties 中的distributionUrl 属性下定义。

    您在构建文件的wrapper 任务中指定的版本仅在实际(重新)生成包装脚本时使用。要更新它,请尝试从命令提示符运行 gradlew wrapper,或通过 IntelliJ 中的 Tasks &gt; build setup &gt; wrapper 快捷方式运行。你也可以手动更新它,但是你不会得到脚本的更新(gradlewgradlew.bat)。

    我通常连续两次运行该任务:第一次更新gradle-wrapper.properties 文件,第二次实际下载新版本,然后使用该新版本更新包装脚本。

    【讨论】:

    • 您只有 assume 版本 5.2.1 已在包装器属性中声明。我正在开始一个全新的项目,没有配置或使用过包装器,而 IntelliJ 仍然坚持下载 Gradle 5.2.1。尽管我已经安装了 Gradle 6。我在 IntelliJ 设置中也找不到任何说明他应该使用旧的嵌入式 Gradle 版本的内容。
    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2020-10-23
    • 2015-09-21
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多