Определение компилятора Eclipse полностью из _within_ build.xml

Как эксперимент мы хотим создать наши продукты с помощью компилятора 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 работы приятно.

8
задан Thorbjørn Ravn Andersen 30 November 2012 в 15:29
поделиться

2 ответа

Один из способов - указать ссылку на 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.

12
ответ дан 5 December 2019 в 12:57
поделиться

Читаем Запуск 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>

Я думаю, вы можете даже повторно использовать тот же файл сборки, просто указать другую цель в качестве точки входа.

1
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

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