使用gradle约定插件设置kotlin jvmTarget选项

使用gradle约定插件设置kotlin jvmTarget选项,kotlin,gradle,intellij-idea,Kotlin,Gradle,Intellij Idea,使用共享子项目之间的公共配置,设置Kotlin编译器选项(如jvmTarget)的正确方法是什么 这个插件设置导致了一个正常的构建,但IntelliJ不理解它,这让我认为这不是正确的方法: plugins { id 'org.jetbrains.kotlin.jvm' } repositories { jcenter() } dependencies { // shared dependencies } tasks.named('test') { useJU

使用共享子项目之间的公共配置,设置Kotlin编译器选项(如
jvmTarget
)的正确方法是什么

这个插件设置导致了一个正常的构建,但IntelliJ不理解它,这让我认为这不是正确的方法:

plugins {
    id 'org.jetbrains.kotlin.jvm'
}

repositories {
    jcenter()
}

dependencies {
    // shared dependencies
}

tasks.named('test') {
    useJUnitPlatform()
}

tasks {
    compileKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
    compileTestKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
}
此插件应用于以下子项目:

plugins {
    id 'my.kotlin-conventions'
    id 'java-library'
}
我用的是Gradle 6.7,Kotlin 1.4.20


编辑:有关IntelliJ问题的更多信息

在IntelliJ中,在子项目中,我看到警告
无法将使用JVM目标1.8构建的字节码内联到使用JVM目标1.6构建的字节码中。请指定正确的“-jvm目标”选项
。在根项目中,我没有看到警告,只是在子项目中。构建和运行项目不会产生任何问题(或警告)


示例:

IntelliJ似乎不喜欢
buildSrc/settings.gradle
文件。当我删除它并“重新加载所有Gradle项目”时,您描述的错误就会消失

注释
buildSrc/settings.gradle
文件中的
rootProject.name=…
行也有效。有趣的是,在不破坏IntelliJ配置的情况下,可以稍后取消对行的注释(并重新加载Gradle配置)。我想这应该是你的解决办法


在我看来,您的构建配置是正确的。这听起来很像IntelliJ的Gradle支持中的一个bug。

如何体现“IntelliJ不理解它”?我相信我可以用这种方法很好地更改JVM目标,包括IntelliJ。但是,由于您没有提供,我的设置也可能不同…@Chriki我已更新了我的问题,以进一步解释IntelliJ问题。添加了最小可复制示例Just Thinks。使用gradle
allprojects
subprojects
dsl应用插件怎么样。我不知道在一个多模块项目中,
插件
部分之间是否有区别,但我记得我们也遇到了同样的问题,感谢最小的可复制示例和错误细节!这仍然是一个棘手的问题,但我相信我已经找到了解决您的问题的方法。请看下面我的答案。嗯,是的,那可能是个错误。在删除
buildSrc/settings.gradle
文件之前,我还必须重新启动IJ。退回它(并重新启动)并没有带来问题。谢谢,尼尔,很高兴听到它对你也有效!如果我的答案是你问题的解决方案,那么如果你能将其标记为公认的答案,我会很高兴:o)嘿@Chriki,你的解决方案有效,但我认为这不是正确的解决方案。我授予了赏金,但我希望能找到更权威的答案。