Kotlin + Java 9 个模块:在模块图中找不到模块 java.base

Kotlin + Java 9 modules: Module java.base cannot be found in the module graph

我在构建使用 Java 9 个功能的 Kotlin 项目时遇到了一些问题。我知道 kotlin 只允许 Java 8 字节码生成,但根据 kotlinlang.org 它应该支持此功能,因为 Kotlin 1.2:

The Kotlin standard library is now fully compatible with the Java 9 module system, which forbids split packages (multiple jar files declaring classes in the same package).

好吧,让我来解决我的问题:我在尝试执行 gradle build 任务时遇到了这个问题:

04:29:27: Executing task 'build'...

Task :compileKotlin FAILED e: Module java.base cannot be found in the module graph e: Module java.management cannot be found in the module graph

失败:构建失败,出现异常。

  • 出了什么问题:任务“:compileKotlin”执行失败。

    Compilation error. See log for more details

  • 尝试:运行 使用 --stacktrace 选项获取堆栈跟踪。 运行 使用 --info 或 --debug 选项以获得更多日志输出。 运行 使用 --scan 以获得完整的见解。

  • https://help.gradle.org

  • 获取更多帮助

BUILD FAILED in 0s 1 个可操作任务:1 个已执行编译错误。 有关详细信息,请参阅日志 04:29:28:任务执行完成 'build'。

我在 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"
}

模块-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,现在效果很好。

如果更改 JDK 版本不起作用,请尝试 IntelliJ

中的修复 IDE 选项

文件 -> 修复 IDE

文件 -> 使缓存无效 -> select“清除文件系统缓存和本地历史记录” -> 无效并重新启动

帮我解决了...