сырой Runtime.exec для вызова Java-CP не работает в Linux - PullRequest
0 голосов
/ 11 мая 2010

Я использую Java-процесс для запуска многих других Java-процессов, используя Runtime.exec(cmd), где cmd похож на следующее:

java -cp "MyJar.jar" pkg.MyClass some-more-arguments

Выполнение той же команды из командной строки прекрасно работает в Windows и Linux, однако, когда мой нерестившийся процесс Java вызывает команду через Runtime.exec, она работает в Windows , но не в Linux.

в Linux я получаю Exception in thread "main" java.lang.NoClassDefFoundError: pkg/MyClass

есть идеи?

Ответы [ 2 ]

2 голосов
/ 12 мая 2010

Использовать Runtime.exec (строка []), а не Runtime.exec (строка)

2 голосов
/ 11 мая 2010

Этот фрагмент кода:

Process p = Runtime.getRuntime().exec("echo \"hello\"");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
System.out.println(br.readLine());

дает этот вывод в Linux:

"hello"

с кавычками (").

Поэтому я предлагаю удалить кавычки (") из строки exec. Они не удаляются при выполнении команды, а передаются внешней программе в качестве аргументов. На самом деле это эквивалентно записи java -cp \"MyJar.jar\" ... в приглашении. .

Если вам нужны метки "(возможно, MyJar.jar содержит пробелы или что-то в этом роде), я предлагаю вам взглянуть на Runtime.exec(String command, String[] envp). Это должно даже сделать его более независимым от платформы.

...