2016-10-12 5 views
1

Текущая ситуация: Я переношу систему сборки из Ant в Gradle. В настоящее время я столкнулся с проблемой с classpath и buildpath. Вот текущий Ant целевой компиляции определение:Миграция Ant Gradle - проблемы с Classpath и Buildpath в Eclipse

<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> 

Разработчики обычно выполняют следующие настройки локальной цели для создания военных файлов и т.д.

<target name="setup-local" depends="clean"> 
    <antcall target="copy_webapp" /> 
    <antcall target="compile" /> 

Мишень copy_webapp копирует .jar и .class из каталога в каталог $ {build.war}. К сожалению, этот целевой экземпляр действительно необходим, так как он вносит соответствующие изменения в файлы (он объединяет файлы из двух каталогов в один, выполняет переписывание и модификации файлов. Это устаревший код без каких-либо комментариев. Я действительно не хочу проводить исследования на нем и выяснить, почему вещи, как они есть)

Проблема для меня: в пути к классам есть ссылка на файлы, которые действительно существуют только тогда, когда цель copy_webapp выполняется заранее. Достаточно справедливо - это работает, если я всегда выполняю только установочную локальную цель.

Теперь, после перехода на Gradle и импорта проекта в Eclipse, я получаю тысячи ошибок в моих .java-файлах, заявив, что импорт не может быть разрешен. Ну, конечно, нет. В пути построения находятся файлы (f.e. "$ {build.war}/path/to/jar"), которые не существуют.

Я не знаю, как решить эти ошибки. Нужно ли мне реструктурировать мой путь к классам, чтобы раньше не было зависимости от цели copy_webapp? Или я могу каким-то образом изменить путь сборки (с помощью Gradle), прежде чем он должен решить задачу copy_webapp?

+0

Мы не можем помочь вам, пока вы не покажете нам свои текущие сценарии градиента. –

+0

Вы используете 'gradle eclipse' для генерации проектов eclipse? – cmcginty

+0

Да, работает затмение градиента. Я думаю, что сценарии Gradle не нужны для решения моей проблемы, поскольку это структурная проблема. – SilverJan

ответ

0

Учитывая эту информацию, трудно получить корень вашей проблемы.

Один из вариантов заключается в создании «промежуточной» директории для проекта Eclipse, когда у вас есть задача Gradle, которая создает сложную структуру каталогов и/или промежуточный вывод, необходимый для развертывания вашего проекта Eclipse.

Способ, которым я занимаюсь, создавая подзадачу, которая запускается при вызове gradle eclipse. Добавьте строку it.dependsOn eclipse в конфигурацию задачи. Результат этой задачи будет идти в build/eclipse/TaskName или в каком-нибудь описательном месте в директории build/. Затем следует обновить ссылки на classpath, чтобы указать на расположение каталога вывода под вашим каталогом build/.

Кроме того, вам может потребоваться выполнить пост-обработку записей пути к классам, которые используется задачей eclipse, для генерации пути к классу проекта, чтобы они правильно указывали местоположение вывода задачи.

+0

Я решил проблему, реструктурируя задачи и путь buildpath. Возможно, проблема была слишком всеобъемлющей, и мой вопрос был недостаточно точным, но ваш ответ хорош и полезен, учитывая информацию – SilverJan