Как я могу использовать управление зависимостями Gradle с проектом Eclipse WTP без ошибок?

Я новичок в Gradle. Я настроил свой проект как Gradle Project с плагином Gradle, чтобы конфигурация проекта была перестроена на основе скрипта сборки gradle. Я пытаюсь настроить свое приложение как динамический веб-проект (используя плагин eclipse-wtp Gradle) и сделать так, чтобы мой проект имел доступ к библиотеке Tomcat Server Runtime.

По-видимому, способ сделать это в Gradle — настроить его как «предоставленную зависимость», которую следует использовать только для компиляции, но не для развертывания. Однако это не работает для меня при развертывании Tomcat в среде IDE. Похоже, что Gradle настраивает два набора зависимостей: Web App Libraries, который учитывает предоставленный параметр зависимости, и Grade Dependencies, который не учитывает. Оба включаются в сборку развертывания веб-приложения, что означает, что "предоставленные" файлы jar Tomcat развертываются и предотвращают запуск Tomcat.

Как настроить Gradle, чтобы предотвратить автоматическое включение Gradle Dependencies в экран сборки развертывания Eclipse? Я не могу удалить его вручную, так как он просто обновится при следующем запуске Gradle.


Я уже пробовал Remove Gradle Dependency Management (щелкните проект правой кнопкой мыши -> Gradle -> Удалить управление зависимостями Gradle), но это не работает. Это решает проблему Tomcat, но тогда мои тестовые зависимости больше не находятся на пути сборки, что приводит к ошибкам в моих модульных тестах.

Вышеупомянутое на самом деле работает, если вы затем также вручную Gradle -> Refresh All. Это заставит плагин Gradle Eclipse повторно сгенерировать файлы конфигурации, а зависимости, которые не являются частью Web App Libraries, будут включены в Referenced Libraries.

Gradle -> Remove Dependency Management просто удалит библиотеку Grade Dependencies, и этого недостаточно.


Я использую:

Это библиотека, которая вызывает проблемы, она включает в себя "предоставленные" банки Tomcat:

Зависимости Gradle

Это мой файл build.gradle:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'war'
apply plugin: 'eclipse-wtp'
webAppDirName = 'WebContent'

// <snip>

dependencies {
    providedCompile('org.apache.tomcat:tomcat-catalina:7.0.34')

    // <snip>
}

// snip

person Kaypro II    schedule 20.11.2015    source источник
comment
Я на Gradle v2.5. Это должно быть что-то, что добавляется плагином Gradle IDE для Eclipse. Если вы создаете выходные данные eclipse из командной строки, не должно быть ссылки на зависимости Gradle.   -  person cmcginty    schedule 21.11.2015
comment
Кейси прав. «Зависимости Gradle» — это контейнер пути к классам, который инструментарий Gradle STS создает при использовании «управляемых зависимостей». На самом деле, официально WTP не поддерживается ни в одной версии API инструментов Gradle, поэтому интеграция с WTP в инструментарии довольно плохая. Лучше всего импортировать проект и отключить управление зависимостями. В этом случае инструменты Gradle STS будут работать по-другому и просто выполнять задачу «затмения» для настройки проекта вместо использования API инструментов. Это работает намного лучше для проектов WTP.   -  person Kris    schedule 23.11.2015


Ответы (1)


Рекомендуемый способ работы с проектами WTP — импортировать их с отключенным «управлением зависимостями». Это связано с тем, что API инструментов Gradle, который используется для заполнения контейнера Gradle Dependencies, не поддерживает проекты WTP.

Если у вас уже есть импортированный проект, вы можете отключить управление зависимостями следующим образом:

Щелкните правой кнопкой мыши проект и выберите «Gradle >> Отключить управление зависимостями».

Затем вы, вероятно, увидите ошибки в проектах из-за отсутствующих зависимостей.

Щелкните проект правой кнопкой мыши и выберите «Gradle >> Обновить все».

Это выполнит задачу 'eclipse' и сгенерирует метаданные eclipse (файл .classpath и т. д.) почти так же, как если бы вы делали это из командной строки.

Если это не работает для вас, есть еще один вариант. Вы можете оставить «Управление зависимостями» включенным, и есть глобальный фильтр исключения, который вы можете использовать для удаления «ненужных вещей» из сборки развертывания. Это действительно не очень хорошее решение, а скорее обходной путь именно для вашей проблемы.

Перейдите в «Windows >> Настройки >> Gradle >> WTP». Вы можете отредактировать список регулярных выражений, чтобы удалить зависимость от tomcat из сборки развертывания.

person Kris    schedule 23.11.2015
comment
О, хм... извините, не знаю, почему я не видел этого раньше. В конце вашего вопроса у вас есть комментарий, который вы уже пробовали. Есть еще одна вещь, которую вы можете попробовать, но это не такое хорошее решение. Я добавлю в качестве дополнительного компонента к моему ответу. - person Kris; 23.11.2015
comment
Кстати, если у вас возникли проблемы со сценарием «отключение управления зависимостями», это, вероятно, означает какую-то ошибку в плагине «eclipse-wtp», о которой следует сообщить в Gradle. - person Kris; 23.11.2015
comment
Я попробую еще раз отключить настройку управления зависимостями. Когда я попробовал это, я не дал ему много шансов, как только увидел некоторые ошибки. Когда gradle генерирует метаданные eclipse, как он должен обрабатывать зависимости тестирования (т.е. где я должен ожидать их появления в IDE без библиотеки зависимостей Gradle)? - person Kaypro II; 24.11.2015
comment
где я должен ожидать, что они появятся в среде IDE без библиотеки зависимостей Gradle, которую я ожидал бы увидеть в сгенерированном файле .classpath. Но ваши комментарии говорят о том, что это не так. - person Kris; 24.11.2015
comment
Спасибо! Это сработало. Я получил ошибки сборки только после удаления управления зависимостями gradle, потому что я не обновил все. Все зависимости, не связанные с веб-приложением, теперь отображаются в пользовательском интерфейсе как ссылочные библиотеки. - person Kaypro II; 30.11.2015
comment
@Kris - Плагин Gradle Eclipse по-прежнему не поддерживает управление зависимостями в проектах WTP? - person Gurwinder Singh; 24.01.2018
comment
@gurv С «устаревшим» инструментом STS, да. На самом деле они больше не поддерживаются и не сильно изменились за долгое время. Вероятно, нецелесообразно продолжать использовать их в данный момент. Вместо этого вам следует изучить возможность использования BuildShip. Я не так много знаю о его внутренностях и возможностях, поэтому я не буду делать предположения о том, что он может или не может делать, рискуя распространить дезинформацию. - person Kris; 25.01.2018