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

问题描述 投票:0回答:1

我在构建使用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上执行时出现此错误。

Project Structure

java gradle kotlin java-module
1个回答
0
投票

我将我的gradle jdk从JDK 8改为JDK 11,现在它就像一个魅力。

© www.soinside.com 2019 - 2024. All rights reserved.