Intellij idea IntelliJ IDEA是怎样的';Gradle的语言水平确定了吗?

Intellij idea IntelliJ IDEA是怎样的';Gradle的语言水平确定了吗?,intellij-idea,gradle,Intellij Idea,Gradle,IntelliJ附带的JetGradle插件显示我的项目存在冲突。上面说我的IDE语言水平是1.7,Gradle语言水平是1.6 以下代码为所有内容打印1.7: compileJava { println project.sourceCompatibility println project.targetCompatibility println sourceCompatibility println targetCompatibility } 从命令行运行Gr

IntelliJ附带的JetGradle插件显示我的项目存在冲突。上面说我的IDE语言水平是1.7,Gradle语言水平是1.6

以下代码为所有内容打印1.7:

compileJava {
    println project.sourceCompatibility
    println project.targetCompatibility
    println sourceCompatibility
    println targetCompatibility
}
从命令行运行Gradle工作正常。在IDEA内部运行它也很有效。它们都使用1.7JDK。我的IDEA项目和模块也配置为使用1.7

当我通过Gradle构建脚本导入项目时,版本默认为1.6。我把它改成了1.7

这个“Gradle语言级别”是什么?我如何修改它


谢谢

Gradle没有通过工具api公开语言级别,因此我认为这只是intellij中定义的“默认项目”语言

在本文中,您可以查看详细信息并追溯到相应的gradle问题

至于“如何修复”,我认为唯一的实际选择是不使用jetgradle&使用。Intellij 12.1将有一个漏洞,但如果工具api中没有该信息,则很难看到如何修复该漏洞


编辑:Gradle刚刚发布了一个包含此功能的RC for 2.11(最终!),请参阅以了解详细信息,其中解释了此支持适用于工具api(即intellij jetgradle)和Gradle idea插件。

它似乎不受支持,但这是一个简单的一次性修复

  • 导航到:文件->项目结构在下面选择“模块”
  • 项目设置。(应该已经)将“语言级别”更改为7.0
或者

  • 深入到文件中的实际编译错误。通常这是 类似于在catch块中处理多个错误
  • 选择 弹出的红色辅助图标,“将语言级别设置为1.7”

我在这里玩游戏有点晚了,但我用这个来解决问题:

apply plugin: 'idea'

allprojects {
  sourceCompatibility = 1.8
  targetCompatibility = 1.8
}

idea {
  project {
    jdkName = sourceCompatibility
    languageLevel = sourceCompatibility
    ipr {
      withXml {

        def xml = """<component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="\$PROJECT_DIR\$" />
        <option name="gradleJvm" value="$sourceCompatibility" />
        <option name="modules">
          <set>
            <option value="\$PROJECT_DIR\$" />
          </set>
        </option>
        <option name="myModules">
          <set>
            <option value="\$PROJECT_DIR\$" />
          </set>
        </option>
      </GradleProjectSettings>
    </option>
  </component>"""

        def node = it.asNode()
        node.append(new XmlParser().parseText(xml))
      }
    }
  }

  module {
    iml {
      withXml {
        def root = it.asNode()
        root.@'external.linked.project.id' = project.name
        root.@'external.linked.project.path' = '$MODULE_DIR$'
        root.@'external.root.project.path' = '$MODULE_DIR$'
        root.@'external.system.id' = "GRADLE"
        root.@'external.system.module.group' = project.group
        root.@'external.system.module.version' = project.version
      }
    }
  }
}
这应该与您在“项目结构”对话框中看到的内容直接对应:


更新2:在项目加载时,Intellij会提示您“导入Gradle项目”。出于某种原因,这会忽略ipr文件中配置的语言级别,默认为1.6。解决这个问题的方法是预先配置ipr和适用的iml文件,以便它了解Gradle集成。这样,就不会提示您导入Gradle项目,并且语言级别保持在1.8。上面的代码块已经更新,包含了必要的配置。

我有一个java/kotlin项目。在混乱之后,我发现如果模块本身或主源代码集被赋予了正确的语言级别,我在gradle.build中应用插件的顺序实际上会受到影响:

plugins {
    id 'org.jetbrains.kotlin.jvm' apply false
    id 'idea'
}
// have to apply in this order to fix idea.module.languageLevel
apply plugin: 'java'
apply plugin: 'org.jetbrains.kotlin.jvm'


sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

idea {
    module {
        jdkName = '1.8'
        languageLevel = new IdeaLanguageLevel("1.8")
    }
}

那张票和我想的答案一样好。谢谢。我们现在是Gradle 15.0,它所依赖的还没有得到很好的解决,Gradle还没有解决这个问题,有人可以给Gradle发送一个PR,将其添加到工具api中,虽然你不能用Gradle完成,但是,当你在运行“/gradlew IDEA”之后在IDEA中“导入项目”时,有一个语言下拉选择器。你只需在那里选择它,在完成项目导入之前,它对我不起作用。我已经在gradle脚本中添加了插件和配置,运行了gradle任务,但是在将项目导入IntelliJ之后,源代码兼容性仍然是1.6。我已经检查了IntelliJ中SDK的名称,它是1.8,所以我认为这应该可以工作。有什么想法吗?嗯,你用Intellij重新加载了这个项目吗?在项目结构中,SDK和语言级别是否都设置为1.8?另外,您正在使用哪个版本的Intellij?我已经多次尝试生成项目并将其重新导入Intellij。也删除了所有以前的项目文件。不知道为什么它不工作,也许你可以发现错误,这是我的gradle脚本:提前感谢你的帮助@我现在看到了同样的行为;单击“导入Gradle项目”后,语言级别设置为1.6,即使在导入对话框中Gradle JVM保留在我的1.8 SDK中:(我还没有找到这样做的原因或解决方法(除了在项目设置中手动设置语言级别之外)。我将考虑如何解决这一问题。只要不导入,它就尊重Gradle在.ipr文件中设置的语言级别,但这实际上否定了IDE中的I。我已经找到了如何解决这一问题的方法。您必须自定义ipr,以便它已经知道Gradle集成,然后它将语言级别单独保留:)请参阅上面的更新2和修改后的示例代码(您可能需要向下滚动查看全部内容)。添加更新的配置后,使用
/gradlew cleanIdea
plugins {
    id 'org.jetbrains.kotlin.jvm' apply false
    id 'idea'
}
// have to apply in this order to fix idea.module.languageLevel
apply plugin: 'java'
apply plugin: 'org.jetbrains.kotlin.jvm'


sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

idea {
    module {
        jdkName = '1.8'
        languageLevel = new IdeaLanguageLevel("1.8")
    }
}