使用Gradle Kotlin DSL任务带参数执行外部Jar文件遇问题
修复Gradle Exec任务运行外部Jar并传参的问题
你的Gradle任务代码存在两个关键问题,导致无法正常运行外部Jar:
- 错误指定可执行程序:
executable(jarFilePath)把Jar文件设为了要执行的程序,但实际应该执行的是java命令,Jar文件是作为java的参数传入的。 - 参数格式错误:把多个命令行参数打包成单个字符串(
"-app AppName -i $folder -o $folder"),这会让Java把整个字符串当成一个参数传递给Jar,而Jar无法正确解析这些分散的参数。
修正后的代码
tasks.register("myGradleTask", Exec::class) { val folder = "${rootProject.rootDir}/myFolder/" val jarFilePath = "${rootProject.rootDir}/Scripts/MyExternalJarFile.jar" // 指定执行程序为java executable("java") // 每个命令行参数单独作为数组元素,确保被正确解析 commandLine( "java", "-jar", jarFilePath, "-app", "AppName", "-i", folder, "-o", folder ) }
额外优化:用Gradle文件API提升路径可靠性
可以替换硬编码的字符串路径,使用Gradle内置的文件处理API,让路径跨平台兼容且更可靠:
tasks.register("myGradleTask", Exec::class) { val folder = rootProject.rootDir.resolve("myFolder") val jarFilePath = rootProject.rootDir.resolve("Scripts/MyExternalJarFile.jar") executable("java") commandLine( "java", "-jar", jarFilePath.absolutePath, "-app", "AppName", "-i", folder.absolutePath, "-o", folder.absolutePath ) }
内容的提问来源于stack exchange,提问作者Sudhir Singh Khanger
相关产品推荐
相关产品推荐

