Gradle任务执行Maven命令报错:commandLine参数问题排查
为什么用
commandLine会失败?原因在这里 这个问题本质是对Gradle Exec任务中参数的工作逻辑理解偏差导致的,我来给你拆解清楚:
错误的核心原因
当你写:
commandLine 'mvn graphwalker:generate-sources'
Gradle会把整个字符串当作一个完整的可执行文件名称去寻找,而不是把mvn作为命令,后面的部分作为参数。这就是报错里那句Cannot run program "mvn graphwalker:generate-sources"的由来——系统里根本不存在叫这个名字的可执行程序,自然会抛出"找不到文件或目录"的错误。
正确写法的逻辑
而你改用executable+args的写法时:
executable 'mvn' args 'graphwalker:generate-sources'
Gradle会正确区分:
executable指定的是要启动的程序(这里是系统里的mvn命令)args则是传递给该程序的命令行参数
这和你直接在终端敲mvn graphwalker:generate-sources的执行逻辑完全一致,所以能正常运行。
补充:commandLine也能正确用
其实commandLine并非不能用,只是你需要把命令和参数拆分成独立的字符串元素,比如:
commandLine 'mvn', 'graphwalker:generate-sources'
这样Gradle就会把第一个元素识别为可执行程序,后面的元素作为参数传递,同样可以正常执行你的Maven命令。
内容的提问来源于stack exchange,提问作者SanchelliosProg
相关产品推荐
相关产品推荐

