Миграция Ant Gradle — проблемы с Classpath и Buildpath в Eclipse

#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. Возможно, проблема была слишком всеобъемлющей, и мой вопрос был недостаточно точным, но ваш ответ хорош и полезен с учетом информации