Я рекомендую сделать что-то вроде этого:
String command = String.format(
"javac -classpath . src%1$sgenerated%1$s%2$s.java -d .%1$sbin",
File.separator,
tspClassName
);
LOG("Executing " + command);
//... exec(command) etc
... где LOG
- это то, что ваша структура ведения журнала использует для записи команды, которая будет выполнена. Это очень поможет в отладке, так как было указано, что созданная вами команда некорректна.
Также вы можете создать строку, используя replace
String command =
"javac -classpath . src/generated/ClassName.java -d ./bin"
.replace("/", File.separator)
.replace("ClassName", tspClassName);
Возможно, это более читабельно.
при сливе Process
потоки
Комментарий ОП предполагает, что waitFor()
никогда не вернется. Вероятно, это вызвано ошибками / предупреждениями компиляции в процессе javac
.
С API :
Поскольку некоторые собственные платформы предоставляют ограниченный размер буфера только для стандартных входных и выходных потоков, невозможность оперативной записи входного потока или чтения выходного потока подпроцесса может привести к блокировке подпроцесса и даже к взаимной блокировке.
Вам необходимо непрерывно сливать Process.getOutputStream()
et.al.
Смотри также
- Java Puzzlers, Puzzle 82: Пивной взрыв
Смежные вопросы