#java #eclipse #gradle #ant #classpath
#java #eclipse #gradle #ant #classpath
Вопрос:
Текущая ситуация: я переношу систему сборки с Ant на Gradle. В настоящее время я столкнулся с проблемой с classpath и buildpath. Вот текущее определение цели компиляции Ant:
<target name="compile">
<mkdir dir="${build.compile.target}/classes" />
<javac srcdir="${src}" destdir="${build.compile.target}/classes">
<classpath>
<fileset dir="${build.war}/WEB-INF/lib">
<include name="**/*.jar" />
</fileset>
<pathelement location="${build.war}/WEB-INF/classes" />
</classpath>
</javac>
</target>
Разработчики обычно выполняют следующую настройку -локальная цель для сборки файлов war и т. Д.
<target name="setup-local" depends="clean">
<antcall target="copy_webapp" />
<antcall target="compile" />
Целью copy_webapp является копирование файлов .jar и .class из каталога в ${build .war} каталог. К сожалению, эта цель копирования действительно необходима, поскольку она вносит соответствующие изменения в файлы (она объединяет файлы из двух каталогов в один, выполняет перезапись и модификации файлов. Это устаревший код без каких-либо комментариев. Я действительно не хочу проводить исследования по этому вопросу и выяснять, почему все так, как есть)
Проблема для меня: в classpath есть ссылка на файлы, которые существуют только тогда, когда цель copy_webapp выполняется заранее. Достаточно справедливо — это работает, если я всегда выполняю только локальную цель setup-local.
Теперь, после перехода на Gradle и импорта проекта в Eclipse, я получаю тысячи ошибок в своих файлах .java, сообщающих, что импорт не может быть разрешен. Ну, конечно, нет. В пути сборки находятся файлы (например, «${build.war}/path/to / jar»), которые не существуют.
Я не знаю, как решить эти ошибки. Нужно ли мне реструктурировать мой classpath, чтобы раньше не было зависимости от цели copy_webapp? Или я могу как-то изменить путь сборки (с помощью Gradle), чтобы он сначала разрешил цель copy_webapp раньше?
Комментарии:
1. Мы не сможем вам помочь, пока вы не покажете нам свои текущие скрипты gradle
2. Вы работаете
gradle eclipse
для создания проектов eclipse?3. Да, запуск gradle eclipse. Я думаю, что сценарии Gradle не нужны для решения моей проблемы, поскольку это структурная проблема.
Ответ №1:
Учитывая информацию, трудно разобраться в корне вашей проблемы.
Одним из вариантов является создание «промежуточного» каталога для проекта Eclipse, когда у вас есть задача Gradle, которая генерирует сложную структуру каталогов и / или промежуточный вывод, необходимый Eclipse для развертывания вашего проекта.
Я решаю эту проблему, создавая подзадачу, которая запускается при вызове gradle eclipse
. Добавьте строку it.dependsOn eclipse
в конфигурацию задачи. Выходные данные этой задачи будут помещены в build/eclipse/TaskName
или в какое-либо описательное место в build/
каталоге. Затем ссылки на пути к классам должны быть обновлены, чтобы указывать на расположение выходного каталога в вашем build/
каталоге.
Кроме того, вам может потребоваться выполнить постобработку записей classpath, которые eclipse
использует задача для генерации пути к классу проекта, чтобы они правильно ссылались на местоположение вывода задачи.
Комментарии:
1. Я решил проблему, реструктурировав задачи и buildpath. Возможно, проблема была слишком всеобъемлющей, и мой вопрос был недостаточно точным, но ваш ответ хорош и полезен с учетом информации