Как эксперимент мы хотим создать наши продукты с помощью компилятора Java Eclipse (ecj-3.5.jar загруженный с eclipse.org) на версии среды выполнения Java 6 вместо JDK, и насколько я понимаю, это - вопрос добавления этой банки к пути к классу муравья и установки build.compiler свойства для указания на адаптер.
Включением
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />
в моем build.xml и муравье вызова с JRE, я получаю ожидаемую погрешность, которой адаптер не может быть найден, и путем добавления ecj-3.5.jar к пути к классу в панели Eclipse, я могу скомпилировать свой код как ожидалось. Я полагаю, что та же функциональность доступна с "-lib foo.jar" из командной строки с современными муравьями.
Теперь, я хочу указать из build.xml, что я хочу ecj-3.5.jar на своем пути к классу, удовлетворяющем то же как выше. Мы можем уже сделать это с задачами Ant, таким образом, я полагаю, что это возможно.
Таким образом, вопрос: Как я могу добавить к пути к классу, используемому javac для определения местоположения компилятора только из build.xml?
Кажется, что предстоящий ant4eclipse 1.0 включает компилятор Eclipse (который является тем, что я хотел использовать это для), таким образом, путем обновления до того (от 0,5) должен решить проблему, мы имеем.
2010-09-24: Ant4Eclipse все еще в M4 без признака того, когда выпуск произойдет.
2011-12-01: Мы теперь мигрировали от муравья на знатока. Сценарии build.xml врезаются в стену сложности, и был необходим новый подход. Любой бывший должный выбрать, что сделать - не идет путь ant4eclipse за исключением тривиальных проектов.
2012-11-30: Год спустя опыт знатока все еще главным образом хорош. Существует много причуд и изменений в мышлении, но большинство имеет смысл в контексте. Знаток может указать уровень компилятора на отдельных проектах легко. Мы изучаем использование ecj вместо javac (по нескольким причинам), но в большинстве целей javac работы приятно.
Один из способов - указать ссылку на componentdef при использовании javac.
<componentdef name="ecj"
classname="org.eclipse.jdt.core.JDTCompilerAdapter"
classpath="ecj-3.7.1.jar" />
<javac ....>
<ecj/>
</javac>
Другой вариант - установить build.compiler как у вас или атрибут компилятора для javac, а затем указать путь к классу компилятора для javac. Это обычный путь, подобный структуре, для хранения пути к классам для загрузки адаптера компилятора.
<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter" ....>
<compilerclasspath>
...
</compilerclasspath>
</javac>
См. Документацию javac task в руководстве Ant для получения дополнительных сведений. Обратите внимание, что оба эти решения работают только начиная с Ant 1.8.
Читаем Запуск Ant через Java. Я думаю, вы можете написать простую обертку, которая будет правильно устанавливать classpath и добавлять ваш jar-файл в результирующий путь классов.
Здесь я просто вырезаю и вставляю пример из приведенной выше ссылки с добавлением интересующей вас библиотеки в classpath:
<java
classname="org.apache.tools.ant.launch.Launcher"
fork="true"
failonerror="true"
dir="${sub.builddir}"
timeout="4000000"
taskname="startAnt"
>
<classpath>
<pathelement location="${ant.home}/lib/ant-launcher.jar"/>
<pathelement location="/path/to/ecj-3.5.jar"/>
</classpath>
<arg value="-buildfile"/>
<arg file="${sub.buildfile}"/>
<arg value="-Dthis=this"/>
<arg value="-Dthat=that"/>
<arg value="-Dbasedir=${sub.builddir}"/>
<arg value="-Dthe.other=the.other"/>
<arg value="${sub.target}"/>
</java>
Я думаю, вы можете даже повторно использовать тот же файл сборки, просто указать другую цель в качестве точки входа.