gradle - 为什么 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 做我想做的事情时,我真的不想编写命令行脚本供人们执行。
解决方案
推荐阅读
- android - 当设备在不稳定的互联网连接区域在线时,Android会自动将数据发送到服务器
- python - 为什么我从 SQLite 数据库中选择的值不放入 python 变量中,而不等于不同变量中的相同字符串?
- excel - 用excel表中的新行替换换行符
- r - 使用 R 找到好的片段
- python - 如何使用 python re findall 和 regex 使 2 个条件可以同时运行?
- google-cloud-platform - GCP Datastore com.google.cloud.datastore.DatastoreException:事务内的查询必须有祖先
- amazon-web-services - 将 EFS 接入点挂载到 ECS 卷时出现问题
- encryption - CANBus需要加密吗?
- r - geom_smooth 绘图标签在 R 的左侧和右侧都被剪掉了
- php - 将日期与laravel中mysql json数组的每个值进行比较