Java 不同 OS 的命令行

Java Command Line on Different OS's

好的,所以我正在使用进程构建器从当前 java 进程启动一个独立的 java 进程,使用代码:

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "C:\Users\MyName\Desktop\Test.jar");
    pb.start();

来测试一下,就像一个简单的问题,命令在所有操作系统上总是"java -jar something.jar,"吗?如果不是,mac 和 linux 的格式是什么?

是的,这适用于大多数 linux、mac 和 windows。不过,我真的不知道它在更晦涩的 linux 平台上是否会变得毛茸茸。

Linux: https://askubuntu.com/questions/101746/how-can-i-execute-a-jar-file-from-the-terminal

Mac: Executing a jar on mac 10.8

很抱歉那些蹩脚的文章,但它们说明了这一点。

答案很复杂。一些并发症是:

  1. 如果 java 不在搜索路径上,您的 ProcessBuilder 将不起作用。

  2. 您的 ProcessBuilder 会在搜索路径上为您提供 java 的版本,这可能与您要使用的版本不同;例如如果用户安装了多个版本的 java.

  3. 您正在使用具有 windows 语法的 JAR 文件的路径名。这不适用于其他平台。

  4. 您正在使用 java 启动器。在 Windows 上,它将使用自己的控制台 window 启动 JVM。 (这相当粗糙/丑陋。)您可能想改用 javaw 。但是 javaw 只存在于 Windows.


TL;DR - 如果您对 Java 安装做出一些假设,那么您所写的内容将有效(经过一些修改),但这些假设并不总是有效。


我的建议是启动运行 JAR 文件的 shell 脚本或批处理文件,并为不同的平台提供不同的版本。以允许管理员/专家用户调整脚本以解决与其软件部署相关的问题的方式进行。

您可能需要查看 Apache Commons Exec。这是一个与之相关的问题。 How to run a java program using apache commons-exec?