当前位置: 首页 > 知识库问答 >
问题:

从Java执行进程,而不考虑底层操作系统

易招
2023-03-14

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

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

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

如果我没有在启动时添加“cmd/c”,那么我就无法在windows环境中运行,错误显示找不到mvn。bat尽管maven主页设置正确。

共有3个答案

屠锐
2023-03-14

您可能需要检查它是哪个操作系统,然后将 cmd /c 替换为该操作系统的相关命令。

请参阅这个问题,了解如何确定您正在运行的系统:如何以编程方式确定Java中的操作系统?

酆英达
2023-03-14

你真的不能真的“不管底层操作系统如何,从Java执行进程”,因为Runtime.exec在操作系统上转发启动命令。然后,你必须描述你想要启动的进程,以及这样做的方法。但是,您可以通过为您知道的进程实现一个ProcessLauncher接口来“虚拟化”进程启动,并为每个操作系统启动子类。有一个工厂来检测您在哪个操作系统上,并创建正确的ProcessLauncher,您应该没问题

慕佑运
2023-03-14

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

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

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

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

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);
}

您可以在此处找到更多信息。

 类似资料:
  • 我预计从下面的代码中,由于超时,可转换的未来将停止处理。但我可以看到取消没有任何影响。 我可以看到2个完全期货仍在运行。

  • 嵌入式操作系统历史悠久、门类繁多、用途广泛,不仅包括嵌入式实时多任务操作者系统(RTOS)、开源的 Linux、机器人和路由器操作系统,还包括新型的物联网操作系统,以及边缘计算操作系统平台。

  • 我的第一个列表中有3个对象,但只有一个包含必需的注释 两个列表都以包含包含注释的唯一对象结尾 如果有人有主意的话,我就有点迷路了!

  • 我在一个项目中工作,我需要要求用户输入一个路径来使用jOptionPane保存程序,但我的问题是,如果用户没有在文本中添加任何内容,然后单击取消或确定,将得到一个错误...我试图控制它,检查字符串是否为空()或等于空

  • 更多面试题总结请看:【面试题】技术面试题汇总 进程是一个拥有资源和执行任务的单元体。进程拥有的资源包括:内存空间中的代码、数据等;I/O 资源;文件;处理机等。 线程是一个执行任务的单元体。线程只拥有处理机,线程之间共享进程的资源,如内存、I/O 等。 对比:   进程 线程 资源 进程是一个拥有资源和执行任务的单元体。 线程是一个执行任务的单元体,不拥有资源,线程之间共享地址空间 切换开销 开销

  • 问题内容: 我正在玩一些微服务,并在笔记本电脑上运行它们,只需为每个微服务分配一个新端口。问题是我想重新启动其中一个,所以我必须将它们全部关闭,因为在操作系统中,进程都称为java。而且尽管我有时会猜到最后一个启动的pid最高,但这并不是绝对安全的选择… 因此,有没有办法在操作系统中启动Java应用程序并为其分配名称?也许像 问题答案: 如果需要区分不同的Java程序,可以使用jps命令,该命令为