如何通过Gradle直接执行项目中的*.kts Kotlin脚本文件
实现方式
完全可以实现,不需要额外引入第三方插件,基于项目现有的org.jetbrains.kotlin.jvm插件做简单配置即可,配置完成后可以直接通过Gradle指令执行指定kts脚本,还能复用项目现有依赖、支持传参、配置任务执行顺序。
配置步骤
- 第一步:补充Kotlin脚本运行所需依赖
在项目的build.gradle.kts的dependencies块中添加以下依赖,和原有依赖放在一起即可:
dependencies { // 原有依赖(比如H2驱动、CSV处理库等保持不变) implementation(kotlin("scripting-jvm-host")) implementation(kotlin("scripting-common")) }
- 第二步:为每个需要执行的kts脚本注册对应Gradle任务
还是在build.gradle.kts中,通过JavaExec任务类型注册自定义任务,以加载测试数据到H2的脚本为例:
tasks.register<JavaExec>("loadTestDataIntoLocalH2Database") { group = "dev-tools" description = "加载CSV测试数据到本地H2数据库" // 复用main源码集的运行时classpath,脚本可直接引用项目中已引入的所有依赖 classpath = sourceSets.main.get().runtimeClasspath // 指定Kotlin脚本运行的入口主类 mainClass.set("kotlin.script.templates.standard.ScriptTemplateWithArgs") // 传入脚本路径+脚本需要的启动参数 args( "src/main/kotlin/LoadTestData.kts", // 脚本需要的参数直接按顺序追加在这里即可,和IDEA运行配置传参效果一致 // 例如 "--db-path=./local/test.h2", "--csv-dir=./testdata" ) }
如果有多个脚本(比如创建测试用户的脚本、初始化表结构的脚本),按照上述格式新增对应任务即可。如果需要多个脚本按固定顺序执行,直接通过dependsOn配置任务依赖,比如导数据任务依赖初始化表结构任务,执行导数据指令时会自动先跑完前置任务,不需要手动分步操作。
使用方式
配置完成后,不需要额外做IDEA运行配置,直接在项目根目录执行对应Gradle指令即可:
- Linux/macOS环境:
./gradlew loadTestDataIntoLocalH2Database - Windows环境:
gradlew.bat loadTestDataIntoLocalH2Database
如果脚本数量较多,不想手动逐个注册任务,也可以写一段简单的Kotlin逻辑扫描src/main/kotlin下的所有.kts文件,自动按照文件名注册对应任务,不过一般项目中这类工具脚本数量不多,手动配置的可读性和参数灵活度更高。
内容的提问来源于stack exchange,提问作者codeape
相关产品推荐
相关产品推荐

