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
很抱歉那些蹩脚的文章,但它们说明了这一点。
答案很复杂。一些并发症是:
如果 java
不在搜索路径上,您的 ProcessBuilder
将不起作用。
您的 ProcessBuilder
会在搜索路径上为您提供 java 的版本,这可能与您要使用的版本不同;例如如果用户安装了多个版本的 java.
您正在使用具有 windows 语法的 JAR 文件的路径名。这不适用于其他平台。
您正在使用 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?
好的,所以我正在使用进程构建器从当前 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
很抱歉那些蹩脚的文章,但它们说明了这一点。
答案很复杂。一些并发症是:
如果
java
不在搜索路径上,您的ProcessBuilder
将不起作用。您的
ProcessBuilder
会在搜索路径上为您提供 java 的版本,这可能与您要使用的版本不同;例如如果用户安装了多个版本的 java.您正在使用具有 windows 语法的 JAR 文件的路径名。这不适用于其他平台。
您正在使用
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?