Когда вы указываете java
без абсолютного пути, есть вероятность, что его разрешение с помощью системного пути поиска команд заканчивается в исполняемом файле другой установки Java.
Для принудительного использованияна той же JVM, на которой вы уже работаете, разрешите команду для системного свойства java.home
.
String jarPath = "MyMainJar.jar";
String jarCmd = Paths.get(System.getProperty("java.home"), "bin", "java").toString();
String [] cmd = { jarCmd, "-jar", jarPath };
ProcessBuilder processBuilder = new ProcessBuilder(cmd);
Process process = processBuilder.start();
В качестве примечания не используйте -noverify
.Преимущества этих опций, в случае их наличия, не оправдывают его рисков.
Кроме того, если вы не планируете передавать построенный ввод новому процессу или анализировать его вывод, его стоит объединить в цепочку .inheritIO()
до ProcessBuilder
, поэтому новый процесс будет использовать те же каналы ввода / вывода, что и родительский процесс, вместо создания каналов.