Поскольку вы запускаете Java -> Java, вы можете использовать существующий classpath для установки classpath в командной строке. Подобные вещи работают очень хорошо и в среде разработчиков.
ProcessBuilder selfLauncher = new ProcessBuilder(
"java", "-cp", System.getProperty("java.class.path"),
"com.my.mainClass" );
selfLauncher.start();
Обновление:
Для исполняемых jar-файлов у вас будет classpath, который является просто относительным путем к самому jar-файлу. Если вам нужны аргументы командной строки, вам придется сохранить их из main и повторно применить их при запуске.
Вы можете увидеть это, упаковав следующую программу в банку. Я не совсем уверен, что произойдет, если у вас есть jar внутри исполняемого файла jar. Они, вероятно, появляются в пути к классам.
public class TestJarPath {
public static void main(String args[]) throws Exception {
for (String s : args)
System.out.print("[" + s + "] ");
System.out.println();
String cp = System.getProperty("java.class.path");
for (String s : cp.split(";"))
System.out.println(s);
}
}
Для java -jar ..\tst.jar X
вы получите вывод, подобный:
[X]
..\tst.jar