Установка JAVA_HOME при запуске Ant из Java
Вопрос
Причина длинная и скучная, но мне нужно запустить скрипт Ant для компиляции кода Java 1.5 из приложения Java 1.4. Я продолжаю получать эту ошибку, хотя:
BUILD FAILED
build.xml:16: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\j2sdk1.4.2_16\jre"
В моем коде у меня есть:
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.setProperty("java.home", "C:\Program Files\Java\jdk1.6.0_04");
p.fireBuildStarted();
p.init();
// so on and so forth
но он игнорирует это. Я также попробовал p.setUserProperty (String, String), но это тоже не помогает. Есть ли способ сделать это без запуска отдельного процесса?
Решение
Есть ли у задачи javac в вашем файле сборки fork="yes"
? Если нет, то не имеет значения, какое свойство установлено в java.home
; ant попытается вызвать метод javac Main
в том же процессе java, который из-за вашей ошибки является JRE, а не JDK.
РЕДАКТИРОВАТЬ Попробуйте задать для свойства executable
вашей задачи javac полный путь к двоичному файлу javac
и добавить compiler="extJavac"
к задаче.
Другие советы
Разве обратная косая черта не должна быть удвоена?
p.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.6.0_04");
Правильно ли установлены переменные окружения JAVA_HOME и ANT_HOME? Если вы настраиваете с помощью кода, он должен работать.
Также проверьте, должен ли каталог% JAVA_HOME% \ bin% ANT_HOME% \ bin находиться в переменной окружения 'path'.
Похоже, ваша проблема в том, что% JAVA_HOME% \ bin отсутствует в envt. хотя путь к переменной.
Еще один способ сделать это - добавить tools.jar в ваш путь к классам. Компилятор javac содержится в этом jar.
java -cp $ JAVA_HOME / lib / tools.jar ...
Опция javac доступна в tools.jar. В eclipse, даже если ваш JRE HOME указывает на jdk, все системные библиотеки указывают на JDK_HOME \ jre \ lib. Там нет tools.jar. Вы можете добавить tools.jar в качестве внешнего файла Jar. Это должно решить вашу проблему