为什么Intellij IDEA使用旧包装器版本导入gradle项目?

为什么Intellij IDEA使用旧包装器版本导入gradle项目?,gradle,intellij-idea,Gradle,Intellij Idea,我对intellij idea中的gradle包装器版本有问题。当我导入一个项目时,它开始下载gradle和gradle包装的旧版本 在我的系统变量中,有gradle home,如下所示: plugins { id 'java' id 'org.jetbrains.kotlin.jvm' version '1.3.41' } group 'com.epam.trykotlin' version '1.0-SNAPSHOT' sourceCompatibility = 1.8

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

在我的系统变量中,有gradle home,如下所示:

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'
}
<?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生成文件如下所示:

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'
}
<?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>
.idea文件夹中的My gradle.xml如下所示:

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'
}
<?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\wrapper\gradle wrapper.properties
属性下定义的

只有在实际(重新)生成包装脚本时,才会使用生成文件中的
包装器任务中指定的版本。要更新它,请尝试从命令提示符下运行
gradlew wrapper
,或通过IntelliJ中的
Tasks>build setup>wrapper
shortcut。您也可以手动更新它,但这样您就不会得到脚本的更新(
gradlew
gradlew.bat


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

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

然而,IntelliJ似乎是硬编码的,可以为所有新项目和所有以前未进行任何不同配置的已打开项目下载Gradle包装
5.2.1

似乎没有任何方法可以阻止这种奇怪的行为。这是可悲的,几乎难以置信。这不仅会占用用户的互联网带宽和磁盘空间,而且还会在开发人员继续调试其项目设置时造成严重的混乱和时间浪费,并弄不清究竟为什么会发生这种情况

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

因此,您的问题为什么的答案必须是“一个设计拙劣的Gradle插件,由自封的开发人员设计,他们早就忘记了自己为谁工作了”

但是,我们需要做的第一件事是停止这个极其烦人的下载

但是,-我没有骗你-中止下载我只能成功地做,如果我完成了以下非常繁重的过程中的每一个步骤。在这些步骤中作弊并没有阻止下载。尽管这些步骤中的许多表面上看起来没有效果,但每一步都有一个未公开的副作用,最终导致下载的成功失败

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

rm -r ~/.gradle/wrapper/dists/gradle-5.2.1-bin/
现在,我们可以打开IntelliJ并直接进入我们的项目,而无需启动任何Gradle下载

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

  • 使用:
    Gradle
  • 使用:
    Gradle
  • 使用Gradle from:
    指定位置
    /usr/lib/Gradle/default

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

您仅假设包装器属性中声明了版本5.2.1。我正在启动一个全新的项目,从未配置或使用过包装器,IntelliJ仍然坚持下载Gradle 5.2.1。尽管我已经安装了Gradle 6,但这是事实。在IntelliJ设置中,我也找不到任何地方说明他应该使用Gradle的旧嵌入式版本。谢谢,rm-r~/.Gradle/wrapper/dists/Gradle-5.2.1-bin/设置我的版本对我帮助很大!