首页 > 解决方案 > 为什么 Gradle 的 javaexec 的行为与直接运行 Java 不同?

问题描述

我正在尝试通过 Gradle 通过 openapi-generator 集成 REST-API 客户端代码的生成。一开始使用 openapi-generator-gradle-plugin,我发现了一些错误,无法实现我想要的,所以我想我可能只是下载 openapi-generator-cli 的 JAR 来定义一个 Gradle 任务javaExec这将为我执行生成器。

任务外观定义为:

构建.gradle.kts

task("generate") {
    javaexec {
        main = "-jar"
        args = listOf(
            "$rootDir\\openapi-generator-cli.jar",
            "generate",
            "--skip-validate-spec",
            "-g kotlin",
            "-i $rootDir\\spec\\api.yml",
            "-o $rootDir\\lib",
            "-c $rootDir\\generate-kotlin.json"
        )
    }
}

但是,在运行generate任务时,执行失败

C:\work\kotlin\myapi\generate-kotlin.json (The filename, directory name, or volume label syntax is incorrect)

这就是事情变得奇怪的地方,因为我看不到相关文件的路径有问题。

然后我激活了任务的调试输出,以查看 Gradle 执行的实际命令。它是(为便于阅读而格式化):

C:\Program Files\Java\jdk1.8.0_202\bin\java.exe ^
-Dfile.encoding=windows-1252 ^
-Duser.country=DE ^
-Duser.language=de ^
-Duser.variant ^
-jar C:\work\kotlin\myapi\openapi-generator-cli.jar generate ^
--skip-validate-spec ^
-g kotlin ^
-i C:\work\kotlin\myapi\spec\api.yml ^
-o C:\work\kotlin\myapi\lib ^
-c C:\work\kotlin\myapi\generate-kotlin.json

对我来说,在那个命令中一切看起来都很好。为了测试,我将它复制粘贴到 CMD 中,它立即运行,没有任何错误。

尽管问题有点集中在 openapi-generator 上,因为我可以手动完美地运行该命令,但我认为这是 Gradle 的问题,并且真的很想知道为什么它运行的命令没有收到此错误有什么问题吗?

当我可以让 Gradle 做我想做的事情时,我真的不想编写命令行脚本供人们执行。

标签: gradleopenapi-generator

解决方案


推荐阅读