Какую роль выполняют профили (profiles) в Maven?

«Какую роль выполняют профили (profiles) в Maven?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Профили в Maven позволяют настраивать сборку проекта для разных сред (development, testing, production) без дублирования кода в pom.xml. Они активируются автоматически (по условиям) или вручную через командную строку.

Основные сценарии использования:

  1. Разные конфигурации для сред:

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <database.url>jdbc:h2:mem:test</database.url>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <database.url>jdbc:mysql://prod-db:3306/app</database.url>
            </properties>
        </profile>
    </profiles>
  2. Условная активация профиля (например, по переменной окружения):

    <profile>
        <id>ci</id>
        <activation>
            <property>
                <name>env.CI</name>
                <value>true</value>
            </property>
        </activation>
        <!-- Настройки для CI-сервера -->
    </profile>
  3. Включение/исключение модулей или плагинов:

    <profile>
        <id>with-docs</id>
        <modules>
            <module>documentation</module>
        </modules>
    </profile>

Активация профиля:

# Активация вручную
mvn clean install -P dev,prod

# Активация по свойству
mvn clean install -Denv=production

Преимущества: Изоляция конфигураций, гибкость сборки, упрощение CI/CD-пайплайнов.