В Spring Boot 2.3.0 были внесены довольно значительные изменения, первый выпуск для проектов, созданных с помощью Gradle вместо Maven.
Каждый проект Spring разрабатывается и управляется независимой проектной группой, которая поддерживает согласованность в частях «белого ящика» (таких как дизайн API), которые чаще всего используются пользователями. проектная группа выбирает свои собственные подходящие инструменты Соглашение о единообразии отсутствует.
Например: Инструменты сборки проекта. Spring Framework создавался с помощью Gradle с версии 3.2.0 в 2012 году, с Spring Boot годом позже и Spring Cloud вскоре после этого, оба основаны на Maven.
проект | инструменты для сборки |
---|---|
Spring Framework | Gradle |
Spring Boot | Maven |
Spring Cloud | Maven |
Зачем переключаться
Основные причины, по которым команда Spring Boot рассматривает возможность перехода с Maven на GradleЧтобы сократить время, необходимое для сборки проекта. Во время разработки и тестирования время, затрачиваемое на ожидание завершения сборки, добавляется к времени, затраченному на исправление ошибок и внедрение новых функций.
Чтобы решить эту проблему, команда попыталась воспользоваться поддержкой Maven для параллельных сборок. Попытки не увенчались успехом из-за сложности сборок Spring Boot, особенно использования плагина Invoker. Решите проблему CI, разделив сборку на четыре части. Сначала создайте основное ядро проекта, а затем параллельно создайте три отдельные части. Но сборка CI по-прежнему занимает час или больше. Кроме того, поскольку он предназначен для модульных сборок CI, он не влияет на эффективность локальной сборки разработчика.
Команда Spring Boot видела в других проектах Spring, которые используют Gradle в качестве инструмента сборки.Инкремент градиентаиСтроить параллельноа также увидеть Gradleпостроить кешпреимущества. Ожидайте аналогичных преимуществ при сборке для Spring Boot с помощью Gradle.
Gradle имеет очень гибкую модель сборки и может определять входы и выходы каждой задачи и их взаимозависимости. Преимущество этой модели сборки заключается в том, что она позволяет задачам выполняться параллельно, а также быть инкрементной, кэшированной или полностью пропущенной. Другими словами, Gradle может минимально выполнять необходимые задачи CI. Хотя мы можем использовать поддержку Maven в Gradle Enterprise, мы также можем пользоваться преимуществами кэширования и пропуска сборки. Но чтобы в полной мере воспользоваться преимуществами всех четырех, вы должны попробовать перейти на Gradle.
Как переключиться
Конфигурация Gradle слишком гибкая, что делает его сборки более сложными для обслуживания и понимания, чем сборки на основе Maven. Например: один и тот же результат сборки может быть достигнут с помощью различных конфигураций. Этого следует избегать при переходе на Gradle. Из четырех выпущенных к настоящему времени вех Spring Boot 2.3 не было выявлено серьезных проблем со сборкой в основной команде или участниках.
- Ключевой особенностью Spring Boot является соглашение о конфигурации, применение этого подхода к построению. Избегайте включения императивной логики в файл build.gradle, написал несколько небольших плагинов, которые можно найти в папке проекта.buildSrc. .
В то время как существующая экосистема Gradle почти пуста для сборок Spring Boot, требуя множества общих плагинов Gradle для применения к Spring Boot с нуля, переход на Gradle удалил почти 9500 строк из кодовой базы.
переключить результат
Миграция сборок в Gradle, безусловно, увенчалась успехом с точки зрения сокращения времени сборки проекта. Как упоминалось выше, на машинах CI и разработчикаПолная сборка на основе Maven занимает час или больше.. иСреднее время успешной сборки в Gradle составляет 9 минут 22 секунды., как показано на скриншоте ниже:
Если вас интересуют более подробные сведения о производительности сборки, вы можете найти их в общедоступном каталоге Spring Boot.Gradle EnterpriseПолучите больше данных об экземпляре.
Помимо повышения производительности, изучите другие функции. Например, в течение некоторого времени существует много нестабильных тестов. По этим причинам сборки терпят неудачу чаще, чем ожидалось, что можно увидеть на панели инструментов «Тесты». Используйте сегментированные тесты Gradle, чтобы заменить распространенные сценарии тестирования CI и помочь нам понять, успешно ли мы решили проблемы.
в заключении
Сборки CI теперь занимают в среднем около 20 минут, что в 3-4 раза быстрее, чем раньше.
Локальные сборки занимают в среднем 2 минуты 30 секунд, что в 20-30 раз быстрее, чем раньше.
Практика стандартизации Gradle в Pay as You Go: изменения, вызванные одной строкой кода!