You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle构建Kotlin多平台项目:JS产物拷贝至JVM资源并运行

Kotlin多平台Gradle任务配置:JS产物同步到JVM资源并运行

针对你的Kotlin多平台项目需求,可以通过自定义Gradle任务+任务依赖实现「构建JS → 复制产物到JVM资源 → 构建并运行JVM」的完整流程,以下是具体配置方案:

核心思路

  1. 确保JS模块先完成构建,生成最终的HTML/CSS/JS文件
  2. 自定义复制任务,将JS产物同步到JVM模块的resources目录
  3. 让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 23:48:18