java - 无论底层操作系统如何,都从 Java 执行进程

标签 java process runtime.exec

您能告诉我一种从 Java 执行进程而不管底层操作系统如何的方法吗?例如。

Process p = Runtime.getRuntime().exec("cmd /c mvn clean install");

上面一行在 Windows 环境中执行 Maven,但我如何在任何操作系统中运行上面的命令?

如果我不在开始时添加 "cmd/c" 那么我将无法在 windows 环境中运行并且错误显示 cannot find mvn.bat 虽然maven home 设置正确。

最佳答案

您可以检查您的操作系统类型,然后执行命令行语句。

为了检查操作系统类型,您需要检索 os.name 系统属性的值:

String OS = System.getProperty("os.name").toLowerCase();

然后使用简单的 if/else 语句,您可以根据操作系统的类型执行命令行语句。

if (isUnix()) {
    String statement = new String[] { "/bin/bash", "-c", "mvn clean install" };
    Process p = Runtime.getRuntime().exec(statement);
else if (isWindows()) {
    Process p = Runtime.getRuntime().exec("cmd /c mvn clean install");
}

...

检查操作系统类型的辅助方法:

public boolean isUnix() {
    return (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0 );
}

public boolean isWindows() {
    return (OS.indexOf("win") >= 0);
}

更多信息你可以找到here .

关于java - 无论底层操作系统如何,都从 Java 执行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18655538/

相关文章:

java - 为特定的 MIDI 设备开发软件

c++ - 如何捕获父进程中的Term操作信号?

java - Java中的FFMPEG(运行时错误)

java - 无法解析方法 setEmptyView

java - 在 webdriver 中使用 log.error 捕获没有此类元素?

Golang - 按名称杀死进程

Windows,多进程与多线程

Java切换目录,然后使用参数触发命令

java - 以编程方式重启 Android Things

java - JAXB - 为什么我只能编码到流/文件?