java - 无法使用 java 运行时从 linux 平台上的另一个 jar 访问 jarfile

标签 java linux jar

我正在尝试使用来自 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"

我已经阅读了其他类似的问题并确保

  1. 目录/opt/mydir/lib/MyFol/和文件mytest.jar有所有权限
  2. 从中启动此进程命令的可执行 jar 也具有所有权限。
  3. 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();

在所有情况下,这在两个平台上都运行良好,无需任何探测。

编辑
糟糕,那里有一个简单的解决方案,但我没有得到它,感谢 Ingocomment 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/

相关文章:

php - UTF-8贯穿始终

linux - 在循环中使用ftp时出现语法错误

java - Android:EditText.getText().toString() 不起作用

java - 在 Spring 操作 repo /服务/ Controller 的正确/首选方式是什么?

python - archlinux/manjaro 中的 OpenCV

java - 将多个项目和依赖项构建到一个 jar 文件中

java - 显示 'Failed to load Main-Class manifest attribute from TestExample.jar'

java - 以编程方式将类添加到现有 JAR 文件

Java多维数组到C#

java - Apache 公地 : Weird results from ChiSquareTest