Миграция с Maven 2/3 на Gradle

#maven-2 #migration #build-process #gradle

#maven-2 #миграция #процесс сборки #gradle

Вопрос:

Я изучал Gradle и выглядит довольно интересно. Я думаю, что возможность писать свои скрипты на любом другом языке, кроме XML, довольно крута, и мне неясно, являются ли полиглотные файлы Maven POM по-прежнему приемлемым вариантом.

Я работаю над проектом, который использует Maven 2.2.1 в качестве инструмента сборки. Этот проект:

  • является многомодульным
  • использует (также наши собственные) плагины
  • полагается на репозиторий прокси-сервера Artifactory

Есть ли какой-либо опыт миграции с Maven на Gradle? Ошибки, болевые точки, угловые случаи? Любой опыт приветствуется.

Ответ №1:

Миграция с Maven на Gradle не так проста, как с Ant на Maven (по крайней мере, на данный момент). Вы можете легко повторно использовать Ant-скрипты и сделать их первоклассными гражданами в своей сборке Gradle. В дорожной карте Gradle также есть задача для глубокого импорта сборок Maven.

До сих пор я перенес две корпоративные сборки Maven на Gradle. Оба они были многомодульными проектами, использующими стандартные плагины Maven. Я в основном переписал сборки способом Gradle, который требует хотя бы некоторых знаний о Gradle. Основываясь на моем опыте, вы можете легко запустить ту же сборку и в Gradle. Gradle на самом деле не ограничивает вас здесь и является довольно гибким. По пути вам может потребоваться написать пользовательский плагин, который еще не существует, в зависимости от того, какие плагины Maven вы используете. Тем не менее, уже существует большое количество плагинов. Пока я еще не столкнулся с реальным препятствием. Несмотря на то, что документация по Gradle довольно хороша, вы можете обнаружить, что читаете много сообщений на форуме Gradle, чтобы найти решение одной из ваших проблем. Некоторые стандартные функции Maven не поддерживаются «из коробки», например provided , область действия или ВОЙНА на месте. Однако есть простые способы обойти это. Я не использовал репозитории артефактов. Те, с которыми я имел дело, были репозиториями Nexus. Насколько я знаю, ребята из Gradle имеют хорошую поддержку Artifactory. Редактировать: JFrog предоставляет плагин для создания артефактов.

Хороший способ начать — использовать инструмент миграции Maven2Gradle, который позволяет сгенерировать сценарий Gradle из вашей сборки Maven. Лично я еще не использовал его. Я разработал сборку Gradle параллельно с сборкой Maven, которая не вызвала никаких проблем. Maven поместил свой вывод под target , Gradle под build . Убедитесь, что вы подготовили свою команду к изменениям. Пусть они попробуют сборку Gradle и познакомятся с инструментом.

После полной миграции вы будете очень довольны удобством обслуживания и расширяемостью вашей сборки. Добавить пользовательскую логику сборки очень просто, и вы будете благодарны, что оставили XML-land. С точки зрения производительности вы также не собираетесь делать шаг назад. Функция инкрементной сборки выполняет свою работу очень хорошо.

Комментарии:

1. Плагин Gradle war теперь (т.е. в Gradle 1.0-milestone-6) поддерживает две дополнительные конфигурации: compileProvided и runtimeProvided.

2. К сожалению, это не поможет вам, если в вашем проекте не применяется плагин WAR. Вам все равно придется определить свою собственную provided конфигурацию. Это все еще обсуждается спорно в сообществе Gradle, например, см. Этот билет JIRA .

Ответ №2:

Возможно, вы также захотите ознакомиться с этим описанием моего опыта переноса проекта maven на gradle.

Комментарии:

1. Не могли бы вы добавить сюда сводку на случай, если ваш сайт выйдет из строя?

Ответ №3:

В каталоге, в котором у вас есть pom.xml просто выполните приведенную ниже команду:

gradle init —введите pom

Это должно преобразовать ваш maven pom.xml для сборки.gradle

Ответ №4:

Вы всегда можете изменить buildDir , чтобы он находился 'target' под gradle, если хотите, чтобы вывод сборки выполнялся 'target' вместо 'build' maven:

 buildDir = 'target'
  

Ответ №5:

Похоже, что maven2Gradle был заменен возможностью запуска gradle init из командной строки (хотя это довольно экспериментальная функция). Кажется, это работает нормально для выполнения некоторых базовых настроек Gradle из проекта Maven.