Логотип Workflow

Article

Updated at:

Stage 6: Build Profiles

Этап 6 - Profiles: разные конфигурации сборки

Один и тот же код может требовать разных сборка settings в development, CI, legacy JDK или OS-specific environment. Профили позволяют сборке осознанно переключать выбранную настройка.

Профиль - это именованный набор сборка настройка, который может менять свойства, зависимости, плагин settings или репозитории. Его не используют, чтобы скрывать случайные различия между машинами.

Этап 6 - Profiles: разные конфигурации сборки

Какую проблему это решает

Maven profiles можно активировать вручную через -P, по operating system, по JDK версия, по property или environment variable. Manual activation наиболее явная и проще всего читается.

Profile может добавить зависимость только для определенной сборки, изменить property вроде skipITs или иначе настроить плагин. Это полезно, но при злоупотреблении сборка становится трудно воспроизводимым.

В Gradle нет полностью такого же механизма профилей, как в Maven. Похожее поведение обычно делают через свойства проекта, переменные окружения, отдельные задачи, convention plugins или разные source sets.

Главное правило - не переносить запуск приложения environment настройка в сборка profile без причины. Database passwords, сервис URLs и feature flags обычно живут в приложение настройка, а не в сборка file.

Profiles лучше всего подходят для сборка-time differences: запускать integration тесты или нет, включать сгенерированный client, использовать special publishing репозиторий или активировать native-image сборка.

Последовательность шагов

  1. profile activation.
  2. свойства.
  3. зависимости/плагины.
  4. selected сборка behavior.

Эта последовательность - картинка в голове, с которой нужно читать файлы сборки. Названия в Maven и Gradle отличаются, но практический вопрос одинаковый: какой входные данные используется, какая задача запускается, какой результат получается и где этот результат хранится.

Конкретный пример

<profile>
  <id>ci</id>
  <properties>
    <skipITs>false</skipITs>
  </properties>
</profile>

Полезная таблица

ПонятиеЗначение
Manualmvn package -Pci
OSАктивируется только на Linux, macOS или Windows.
JDKАктивируется для конкретной JDK версия.
PropertyАктивируется при наличии Maven property.
EnvironmentАктивируется по environment variable.

Где это встречается в работе

Используй profiles умеренно и документируй их. Build, который молча меняется в зависимости от разработчик machine, - это будущий production incident.

В командной разработке знание сборки - не необязательная теория. Оно влияет на локальный development, время CI, зависимость upgrades, стабильность релиз и debugging. Когда Spring сервис не стартует после изменения зависимость, CI скачивает другую библиотека версия или артефакт не получается deployed, ответ обычно находится в сборка настройка, зависимость graph, упаковка step или репозиторий setup.

Частые ошибки

  • Копировать настройка, не понимая, на какой слой сборка она влияет.
  • Считать локально успешный сборка доказательством, что CI и production delivery тоже сработают.
  • Игнорировать зависимость trees, сгенерированный результат и репозиторий rules до момента failed релиз.
  • Смешивать приложение запуск приложения настройка и сборка-time настройка.

Чеклист понимания

  • Я могу объяснить главные terms этой статьи, не перечитывая сборка file вслух.
  • Я могу нарисовать последовательность от исходный код до артефакт для этой темы.
  • Я могу назвать command или file, который первым проверю при сборка problem.

Вопросы для самопроверки

  1. Какую проблему этот сборка concept решает в реальном Java или Spring проект?
  2. Какой file или command быстрее всего даст evidence, когда что-то ломается?
  3. Какая ошибка заставит сборка работать локально, но падать в CI или у другого разработчик?

Практика перед следующим уроком

Добавьте небольшой профиль или вариант сборки, который меняет одно безопасное свойство: например classifier артефакта или выводимое значение. Запустите сборку с профилем и без него, затем проверьте, что обычная сборка работает без специальных флагов.

Авторизуйтесь чтоб пройти тесты

Practice

Интерактивная практика

Выполните задания и сразу проверьте ответ.