当前位置: 首页 > 面试题库 >

使用ProcessBuilder运行MVN

陆城
2023-03-14
问题内容

我创建了一个类,该类使用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机器上运行,那我该怎么办?


问题答案:

发生这种情况是因为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’,但这并不能简化任何事情,因此我避免这样做。



 类似资料:
  • 线程“main”java.io.ioException中出现异常:无法运行程序“java” 但是当我从终端上运行任何java命令时,它们都工作得很好。 我发现的另一件事是,当我在终端中运行命令:并使用ProcessBuilder()时,它们会显示不同的输出。即ProcessBuilder命令中不显示jdk/bin的路径。 我如何解决这个问题?

  • 问题内容: 好的,所以我有一个通过ProcessBuilder运行的python脚本。一切正常。我遇到的问题是,每当我将参数传递到python脚本时,python脚本都会以响应。但是,如果我采用确切的命令并将其复制并粘贴到命令提示符下,则它运行得很好。有什么帮助吗?这是我现在所拥有的一般想法: 问题答案: 将两个单独的参数传递给,而不是串联和: 否则,要执行的程序将看到无法识别的单个参数。

  • 我正在尝试使用ProcessBuild运行cmd语句。 但是,我只能打开cmd。exe 那么如何编写此语句通过java运行cmd命令??我得到了错误,因为语句由"*"组成。如何编辑ProcessBuilder以便我可以运行语句?非常感谢

  • 如何在java中调用ProcessBuilder运行nohup...&格式的bash命令? 我现在有一个简单的bash脚本t.sh。这个脚本维护一个计数器,每过1s,该计数器会+1,并且将当前该计数器的值输出到标准输出上。 我可以直接使用nohup bash t.sh & 来在linux环境下运行该脚本,该脚本会在nohup.out中输出下面的预期结果 现在,我想要在Java中通过ProcessB

  • I使用Processbuilder如下所示: 在方法中,我设置要执行的linux命令,如下所示: 我可以从终端执行相同的命令。

  • 我试图使用Java的类来执行包含管道的命令。例如: 然而,我得到了一个错误: 然后: 尽管该命令在命令行中运行得很好,但我无法让执行将其输出重定向到另一个的命令。 有没有办法做到这一点?