Вопрос по java, javac, compilation, ant – Какой javac.exe используется заданием ant javac?

3

Я сталкиваюсь с одной проблемой. Я переименовалjavac.exe на моей машине и заметил, что муравейjavac Задача все еще работает отлично.

Кто-нибудь знает откуда берется javac.exe?

Вы смотрели на егоdocumentation? Guillaume Polet
@ Хантер, один из моих друзей, столкнулся с проблемой, и, не зная, где он переименовал этот файл и сообщил, что задача муравья все еще может найти javac CommonMan
Вероятно, поставляется с собственной копией. Из любопытства, почему вы переименовали Javac? Hunter McMillen
Я сделал, и я думаю, что javac должен быть где-то в моей машине, чтобы муравей использовал его. Пожалуйста, поправьте меня, если я ошибаюсь. CommonMan
Проверьте системный путь & amp; Путь Java Это может поднять javac.exe оттуда. Нечто подобное случилось со мной. У меня был jdk6 & amp; jdk7 установлен, но папка bin jdk7 была в системном пути & amp; следовательно, он выбирал java.exe оттуда. Bharat

Ваш Ответ

2   ответа
-1

Вы можете попробовать начатьВот и проверьте что настроено в глобальномbuild.compiler свойство, оно может указывать куда-то еще

6

я полагаю, что по умолчанию Ant пытается выполнить класс компилятора java напрямую с помощью этого кода:

try {
        Class c = Class.forName ("com.sun.tools.javac.Main");
        Object compiler = c.newInstance ();
        Method compile = c.getMethod ("compile",
            new Class [] {(new String [] {}).getClass ()});
        int result = ((Integer) compile.invoke
                      (compiler, new Object[] {cmd.getArguments()}))
            .intValue ();
        return (result == MODERN_COMPILER_SUCCESS);

    } catch (Exception ex) {
        if (ex instanceof BuildException) {
            throw (BuildException) ex;
        } else {
            throw new BuildException("Error starting modern compiler",
                                     ex, location);
        }
    }

Код пришел изВот.

Это означает, что если библиотека tools.jar находится на текущем пути к классу Ant, она подхватит класс и запустит его. Это приводит к тому, что javac.exe можно переименовать во что угодно, он все равно будет работать. Таким образом, чтобы ответить на ваш вопрос, он на самом деле не выполняет ничего из «javac.exe».

Существуют и другие реализации задачи Javac, но я думаю, что это стандартная версия для всех компиляторов 1.3+

Это не изолировано. Я полагаю, что Tomcat делает то же самое для компиляции JSP, например, если я правильно помню, по крайней мере.

Похожие вопросы