Gradle构建Kotlin多平台项目:JS产物拷贝至JVM资源并运行
Kotlin多平台Gradle任务配置:JS产物同步到JVM资源并运行
针对你的Kotlin多平台项目需求,可以通过自定义Gradle任务+任务依赖实现「构建JS → 复制产物到JVM资源 → 构建并运行JVM」的完整流程,以下是具体配置方案:
核心思路
- 确保JS模块先完成构建,生成最终的HTML/CSS/JS文件
- 自定义复制任务,将JS产物同步到JVM模块的resources目录
- 让JVM模块的资源处理、构建、运行任务依赖上述复制任务,保证执行顺序
Kotlin DSL 配置(build.gradle.kts)
1. 基础目标配置
先确认项目的JVM和JS目标配置(可根据你的项目调整):
kotlin { jvm { withJava() jvmToolchain(17) // 替换为你的项目使用的JDK版本 } js { browser { commonWebpackConfig { outputFileName = "app.js" // 自定义JS输出文件名 } } binaries.executable() } // commonMain 源码集配置(按需补充) }
2. 自定义复制任务
创建任务同步JS构建产物到JVM资源目录:
// 注册复制JS产物到JVM资源的任务 tasks.register<Copy>("copyJsResourcesToJvm") { // 依赖JS生产构建任务,确保先完成JS产物构建 dependsOn(tasks.jsBrowserProductionBuild) // JS构建产物的输出目录(Kotlin JS browser目标默认输出路径) from(kotlin.js.browser.destinationDirectory) // 目标目录:JVM主源码的resources子目录,可根据需求调整(比如直接用src/jvmMain/resources) into(layout.projectDirectory.dir("src/jvmMain/resources/static")) // 可选:过滤需要复制的文件类型 include("**/*.html", "**/*.css", "**/*.js", "**/*.js.map") }
3. 绑定任务依赖
让JVM模块的资源处理和运行任务依赖复制任务,保证执行顺序:
// 让JVM资源处理任务依赖复制任务,确保打包时包含最新JS产物 tasks.jvmProcessResources { dependsOn(tasks.named("copyJsResourcesToJvm")) } // 让JVM运行任务依赖复制任务,确保启动前完成JS产物同步 tasks.jvmRun { dependsOn(tasks.named("copyJsResourcesToJvm")) // 可添加JVM运行参数(如端口号、系统属性等) }
Groovy DSL 配置(build.gradle)
如果你的项目使用Groovy Gradle脚本,对应配置如下:
kotlin { jvm { withJava() jvmToolchain(17) } js { browser { commonWebpackConfig { outputFileName = 'app.js' } } binaries.executable() } } tasks.register('copyJsResourcesToJvm', Copy) { dependsOn tasks.jsBrowserProductionBuild from kotlin.js.browser.destinationDirectory into file('src/jvmMain/resources/static') include '**/*.html', '**/*.css', '**/*.js', '**/*.js.map' } tasks.jvmProcessResources { dependsOn tasks.named('copyJsResourcesToJvm') } tasks.jvmRun { dependsOn tasks.named('copyJsResourcesToJvm') }
使用方式
直接执行以下命令,Gradle会自动按「JS构建 → 复制产物 → JVM构建 → JVM运行」的顺序执行:
./gradlew jvmRun
如果需要使用JS开发环境的构建产物(包含调试信息),只需将jsBrowserProductionBuild替换为jsBrowserDevelopmentBuild即可。
内容的提问来源于stack exchange,提问作者Tessan
相关产品推荐
相关产品推荐

