在 Kotlin 1.3 多平台 gradle 项目中参考来自 kotlin-jvm 的 kotlin-js 资源

Posted

技术标签:

【中文标题】在 Kotlin 1.3 多平台 gradle 项目中参考来自 kotlin-jvm 的 kotlin-js 资源【英文标题】:Reference kotlin-js resources from kotlin-jvm in Kotlin 1.3 multiplatform gradle project 【发布时间】:2019-05-04 08:33:47 【问题描述】:

在 Kotlin 1.2.61 中,可以有一个从 kotlin-jvm 模块到 kotlin-js 模块的 Gradle 依赖项。

这对于将生成的 js 文件包含在一个独立的 jar 中以将它们作为静态资源提供服务很有用。

但是,从 Kotlin 1.2.70 开始,有一个限制阻止将依赖项从 kotlin-jvm 模块添加到 kotlin-js 模块,请参阅:issue。

确保在 kotlin-jvm 模块之前构建 kotlin-js 模块的受支持方法是什么,以便可以将 kotlin-js dist 文件包含在 kotlin-jvm 模块中(大概不添加依赖项他们之间)?

【问题讨论】:

【参考方案1】:

回答自己的问题,原来 Kotlin 前端插件已被弃用,支持的解决方案是使用 Multiplatform 插件。

我能够让它与 Kotlin Gradle DSL 一起使用,带有 Spring Boot 后端(包括能够从 IDE 调试)和 React 前端的热重载: https://github.com/alexoooo/sample-multiplatform-boot-react

proj-jvm build.gradle.kts 声明了对 proj-js 模块的依赖:

tasks.withType<ProcessResources> 
    val jsProject = project(":proj-js")
    val task = jsProject.tasks.getByName("browserProductionWebpack") as KotlinWebpack

    from(task.destinationDirectory!!) 
        into("public")
    

    dependsOn(task)

请注意,Kotlin 多平台项目目前处于试验阶段,随着新 IR 的引入,一些细节可能会发生变化:https://blog.jetbrains.com/kotlin/2020/03/kotlin-1-4-m1-released/

【讨论】:

以上是关于在 Kotlin 1.3 多平台 gradle 项目中参考来自 kotlin-jvm 的 kotlin-js 资源的主要内容,如果未能解决你的问题,请参考以下文章

从 kotlin 多平台项目创建 fat jar

无法导入 Kotlin 多平台通用的依赖项

如何在多平台多项目 Kotlin 构建中向另一个项目的测试添加依赖项

使用来自 Kotlin/Native 和 Gradle 的 Apple 依赖项,更具体地说是 SwiftUI

gradle 同步成功时,Kotlin 多平台无法解析引用

通过 gradle legacy 插件应用程序应用 Kotlin 多平台插件