Я пытаюсь запустить Javac из Java.Одним из способов является использование Runtime.Это не помогает, и не дает никаких ошибок, поэтому трудно понять, почему.Вот пример кода, который я хотел бы использовать для работы с процессом.Я попытался запустить это из командной строки Windows с путем Windows, содержащим javac, из msys2 с путем linux, содержащим javac, и с жестко закодированным путем.Ничего не сработало.
/ d / bin / jdk1.8.0_144 / bin / javac -version (запускается в командной строке в msys2)
import java.io.*;
import java.util.concurrent.TimeUnit;
public class RunningProcesses {
public static void runProcessUsingProcessBuilder() throws Exception {
ProcessBuilder builder = new ProcessBuilder("d:/bin/jdk1.8.0_144/bin/javac", "test.java");
Process p = builder.start();
Thread.sleep(10000);
int status = p.exitValue();
System.out.println(status);
}
public static void runProcessUsingRuntime() throws Exception {
Runtime r= Runtime.getRuntime();
Process p = r.exec("javac test.java");
// Process p = r.exec("d:/bin/jdk1.8.0_144/bin/javac test.java");
BufferedReader isr = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = isr.readLine()) != null)
System.out.println(line);
int status = p.exitValue();
System.out.println("Process ran with result: " + status);
}
public static void main(String[] args) throws Exception {
runProcessUsingRuntime();
}
}
Результат всегда одинаков,состояние ошибки 2. Но в версии, вызываемой из среды выполнения, я получаю вывод процесса и ничего не вижу.
Запуск блокнота работает.
Получение выходных данных процесса и просмотрэто нормально работает, когда я могу набрать команду, что было бы в целом полезным, поэтому я хотел бы знать, что происходит не так.Однако мне приходит в голову, что еще лучшей альтернативой было бы, если бы я мог запустить компилятор напрямую.Вместо запуска команды, есть ли опубликованный API для компилятора?Я не могу найти один.Например:
java.tools.javac.compile (String code)
будет намного лучше.Зачем мне запускать задачу, когда я могу просто запустить код в своем процессе?