我在这里玩游戏有点晚了,但我用它来解决问题:
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
}
}
}
}
然后用于./gradlew idea
生成将项目语言设置为 1.8 的项目元数据。编辑:Gradle idea 插件仅处理基于文件的元数据,而不是基于目录的 (.idea/) 元数据。如果将其应用于使用基于目录的元数据的现有项目,则需要删除项目根目录中的 .idea/ 文件夹
注意:将 jdkName 设置为“1.8”假设在 Intellij 中注册了一个名为“1.8”的 Java SDK。
更新1:生成的ipr文件包含这个块,表明使用Java 1.8(注意'languageLevel'和'project-jdk-name'属性)
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" assert-keyword="true" jdk-15="true" project-jdk-type="JavaSDK" assert-jdk-15="true" project-jdk-name="1.8">
<output url="file://$PROJECT_DIR$/out"/>
</component>
这应该与您在“项目结构”对话框中看到的内容直接对应:
更新 2:在项目加载时,Intellij 会提示您“导入 Gradle 项目”。由于某种原因,这会忽略 ipr 文件中配置的语言级别,默认为 1.6。解决这个问题的方法是预先配置 ipr 和适用的 iml 文件,以便它知道 Gradle 集成。这样,系统不会提示您导入 Gradle 项目,并且语言级别保持在 1.8。上面的代码块已更新以包含必要的配置。