我正在尝试使用来自 java 类的 Runtime.exec 函数从另一个 jar 运行可执行 jar。
代码是
Runtime r = Runtime.getRuntime();
Process p = r.exec("java -jar \""+_JarPath +"\" " + "\""+ args[0]+"\""+ " " +"\""+ args[1]+"\""+ " " +"\""+ args[2]+"\"" + " " +"\""+ args[3]+"\"");
此处,参数 args
不为空且定义明确。
此代码在 Windows 平台上运行良好,但在 Linux 上,我收到错误
Unable to access jarfile "/opt/mydir/lib/MyFol/mytest.jar"
我已经阅读了其他类似的问题并确保
- 目录
/opt/mydir/lib/MyFol/
和文件mytest.jar
有所有权限 - 从中启动此进程命令的可执行 jar 也具有所有权限。
- linux 用户也是admin
我在 Linux 上使用 OpenJDK。
最佳答案
上述代码在 Linux 机器上的实际问题是双引号,正如 Robin Green 在 post 中所述,他是对的。
但是当路径包含空格或其他参数之间有空格时,我无法运行 jar。
为此,我不得不尝试一些其他方式来加载 jar ,这可以在两个平台上无缝工作,并且也消除了空间问题。
在这种情况下,Process Builder 出手相助。
ProcessBuilder pb = new ProcessBuilder("java", "-jar", _JarPath, args[0], args[1], args[2], args[3]);
Process p = pb.start();
在所有情况下,这在两个平台上都运行良好,无需任何探测。
编辑
糟糕,那里有一个简单的解决方案,但我没有得到它,感谢 Ingo 的 comment posted我们可以使用 exec
Runtime r = Runtime.getRuntime();
Process p =null;
String[] cmdarray = new String[7];
cmdarray[0] = "java";
cmdarray[1] = "-jar";
cmdarray[2] = _JarPath;
cmdarray[3] = args[0];
cmdarray[4] = args[1];
cmdarray[5] = args[2];
cmdarray[6] = args[3];
p = r.exec(cmdarray);
关于java - 无法使用 java 运行时从 linux 平台上的另一个 jar 访问 jarfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19873679/