kotlin - Gradle 6.4、Kotlin 和 JPMS

标签 kotlin gradle java-platform-module-system

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

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

jjohannes 在他的 repo 之一上有一个 (kotlin) 示例

我试图将重要的内容复制/粘贴到我们的项目中 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变化不大

我究竟做错了什么?

最佳答案

我检查了你的 repo 。

您将需要这些修复程序。

  • 已添加 java插入。
  • plugins {
        kotlin("jvm") version "1.3.72"
        java
    }
    
    java {
        modularity.inferModulePath.set(true)
    }
    
  • 使用kotlin("stdlib")在所有 3 个地方(2 个在 build.gradle.kts 和 1 个在 module-info.java)。
  • 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为我成功 build 。
    我还添加了缺少的测试依赖项:
    testImplementation("io.kotlintest:kotlintest-runner-junit5:$kotlintest_version")
    

    更新:列出两个 stdlibstdlb-jdk8

    关于kotlin - Gradle 6.4、Kotlin 和 JPMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61638287/

    相关文章:

    java - ResolvedModule、Module 和 Observable Module 有什么区别

    java - 包 com.fasterxml.jackson.annotation 不可见

    java - 如何避免 Java/Kotlin/IntelliJ IDEA 中的 StackOverFlow 错误?

    android - $ 和 Android JNI 命名之后是什么?

    android - 我正在尝试将 Android 旧库升级到 androidx (Android + Kotlin)

    grails - 如何正确使用Grails插件

    java - GVM 始终离线

    android - 在 Kotlin 的内部类中使用 fragment 的上下文

    android - 如何使用 gradle 构建文件从 Android 上的 org.apache 正确导入 HttpClient?

    java - 修补模块引发模块未找到错误