我试图通过Groovy运行mvn ...
命令。
这是我写的:
def mvnPath = System.getenv("MAVEN_HOME") + "/bin/mvn"
def pomPath = new File("./pom.xml").getAbsolutePath()
Process mavenPrimaryPackagingProcess = new ProcessBuilder(
"${mvnPath} primary-package -Pfull-release -f ${pomPath}"
)
.directory(new File("."))
.redirectOutput(ProcessBuilder.Redirect.INHERIT)
.start()
然而,当我运行上面的代码时,我得到了以下异常:
线程“main”出现异常java.io.IOException:无法运行程序“c:\Maven\maven-3.8.4/bin/mvn primary-package -Pfull-release -f D:\projectRoot.\pom.xml”(在目录“.”中):CreateProcess error=2,Le fichier spécifié est introuvable
(The“Le fichier spécifié est introuvable”是法语,意思是“系统找不到指定的文件”)。
从异常消息中可以看到,mvn
可执行文件和pom.xml
都是完全限定的,所以我真的不明白哪个是找不到的文件。
这段代码是通过java -jar ...
在命令行上调用来运行的,终端设置在D:\projectRoot
上(与我在new File(".")
上打印的文件夹相同)。
1条答案
按热度按时间yhuiod9q1#
它看起来像你已经省略了正确的文件扩展名为MVN命令在Windows上“.CMD”,并需要追加,使路径名解析正确-使用
System.getenv("MAVEN_HOME") +"/bin/mvn.cmd"
。Java不像CMD / Powershell,如果提供的路径名不存在,它会检查
PATHEXT
后缀。根据@daggett的评论,您还需要拆分参数以使用
ProcessBuilder(String... command)
,它的工作方式与容易出错的参数拆分调用Runtime.getRuntime.exec(String)
不同。如果您拆分参数,但没有为MVN命令指定正确的文件扩展名,则应该看到不同的错误: