как запустить компилятор Java в Java - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь запустить 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)

будет намного лучше.Зачем мне запускать задачу, когда я могу просто запустить код в своем процессе?

...