我在构建使用Java 9功能的Kotlin项目时遇到了一些问题。我知道kotlin只允许Java 8字节码生成,但根据kotlinlang.org,它应该支持这个功能,因为Kotlin 1.2:
Kotlin标准库现在与Java 9模块系统完全兼容,后者禁止拆分包(多个jar文件在同一个包中声明类)。
好吧,让我的问题:当我尝试执行gradle build
任务时,我得到了这个:
04:29:27:执行任务'构建'......
任务:compileKotlin FAILED e:在模块图中找不到模块java.base e:在模块图中找不到模块java.management
FAILURE:构建因异常而失败。
- 出了什么问题:任务':compileKotlin'执行失败。 编译错误。有关详细信息,请参阅日志
- 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。使用--scan运行以获得完整的见解。
- 在https://help.gradle.org获得更多帮助
在0s 1可操作的任务中构建失败:1执行编译错误。有关更多详细信息,请参阅日志04:29:28:任务执行完成“构建”。
我在Google上搜索了这个错误并找到了this topic,其中一个人有同样的问题,他说他通过针对大于8的JDK修复它,但我已经将JDK 11作为项目SDK和sourceCompatibility
。
我将把build.gradle和项目结构的一些重要部分留在这里给你们检查一下。
的build.gradle
buildscript {
ext.kotlin_version = '1.3.21'
...
repositories { ... }
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.17"
}
}
plugins {
...
}
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'application'
apply plugin: 'maven'
group 'io.github.dogobot.core'
version '4.0.0'
...
sourceCompatibility = 1.11
repositories {
mavenCentral()
jcenter()
maven { ... }
maven { ... }
maven {
url 'http://maven.ej-technologies.com/repository'
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
...
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
module-info.Java
module io.github.dogobot.core {
requires kotlin.stdlib;
requires kotlin.reflect;
requires kotlin.logging;
requires java.management;
requires BootingBits;
}
我可以在Intellij Idea上运行项目没有任何问题,只需在gradle上执行时出现此错误。
我将我的gradle jdk从JDK 8改为JDK 11,现在它就像一个魅力。