小编典典

使用ProcessBuilder运行MVN

java

我创建了一个类,该类使用ProcessBuilder创建流程,然后启动流程

ProcessBuilder pb = new ProcessBuilder("mvn","exec:java","-Dexec.mainClass="+"FunnyClass");

现在,当我在linux机器上运行该类时,它运行良好,但是在Windows上却给了我错误,指出未找到“ mvn”之类的东西,我需要更改为

ProcessBuilder pb = new ProcessBuilder
                       ("mvn.bat","exec:java","-Dexec.mainClass="+"FunnyClass");

但是,如果我在命令提示符“ mvn exec:java -Dexec.mainClass =
FunnyClass”上运行命令,它将运行正常。那么,为什么我需要在processbuilder中提供mvn.bat。

有什么解决办法吗?

我的Java应用程序将同时在Windows和Linux机器上运行,那我该怎么办?


阅读 304

收藏
2020-11-26

共1个答案

小编典典

发生这种情况是因为Windows
Shell(cmd)具有一个功能:它尝试向exe您正在运行的命令行添加扩展名,’bat’,’cmd’。找到第一个匹配项(即文件系统中确实存在的文件)后,它将运行它。

如果是Maven,您将拥有mvn无法在Windows和Windows批处理文件’.bat’上执行的Unix Shell脚本。命令提示符将“
.bat”添加到您在命令提示符中键入的“ mvn”,看到该文件存在并运行它。

当您从Java运行进程时,您没有外壳程序,因此没有人做此工作。我建议您检查操作系统并按操作系统保留命令。如果要清除解决方案,请创建资源文件cmd.properties:

mvn.windows = mvn.bat
mvn.unix = mvn

现在使用系统属性检查OS,os.name并使用中的数据创建命令cmd.properties

另一种解决方案是cmd /c在Windows 上运行命令,在UNIX上运行’/ bin / sh -c’,但这并不能简化任何事情,因此我避免这样做。

2020-11-26