Gradle6.4、Kotlin 和 JPMS

Gradle 6.4, Kotlin and JPMS

所以,6.4(终于)出来了 JPMS support

迫不及待地想尝试一下,我开始修改我们的一个项目以便使用它。

jjohannes 在他的 repo

中有一个 (kotlin) 示例

我试图 copy/paste 对我们的项目重要 here

可惜我没有成功

每当我尝试 运行 时,我总是得到:

C:\Users\elect\IdeaProjects\kotlin-unsigned\src\main\java\module-info.java:4: error: module not found: kotlin.stdlib.jdk8 requires kotlin.stdlib.jdk8;

参考module-info.java

module com.github.kotlin_graphics.kotlin_unsigned {

//    requires kotlin.stdlib;
    requires kotlin.stdlib.jdk8; // error

    exports unsigned;
}

stdlibstdlib-jdk8变化不大

我做错了什么?

我检查了你的仓库。

您将需要这些修复程序。

  • 添加了 java 插件。
plugins {
    kotlin("jvm") version "1.3.72"
    java
}

java {
    modularity.inferModulePath.set(true)
}
  • 在所有 3 个地方使用 kotlin("stdlib")(build.gradle.kts 中有 2 个,模块 info.java 中有 1 个)。
dependencies {
    implementation(kotlin("stdlib"))
    ...
    components { withModule<ModularKotlinRule>(kotlin("stdlib")) }
}
module com.github.kotlin_graphics.kotlin_unsigned {

    requires kotlin.stdlib;
//    requires kotlin.stdlib.jdk8;

    exports unsigned;
}

对于 kotlin("stdlib-jdk8"),您需要将其添加到 kotlin("stdlib")

旁边
dependencies {
    implementation(kotlin("stdlib"))
    implementation(kotlin("stdlib-jdk8"))
    ...
    components { withModule<ModularKotlinRule>(kotlin("stdlib")) }
    components { withModule<ModularKotlinRule>(kotlin("stdlib-jdk8")) }
}

那么,你的module-info.java可以

module com.github.kotlin_graphics.kotlin_unsigned {

//    requires kotlin.stdlib;
    requires kotlin.stdlib.jdk8;

    exports unsigned;
}

./gradlew build 为我构建成功。
我还添加以添加缺少的测试依赖项:

testImplementation("io.kotlintest:kotlintest-runner-junit5:$kotlintest_version")

更新:已列出 stdlibstdlb-jdk8