17 Profiles

Maven-Profile sind Sammlungen von Konfigurationen, die unter bestimmten Bedingungen aktiviert werden können. Sie ermöglichen verschiedene Build-Einstellungen für unterschiedliche Umgebungen wie Entwicklung, Test und Produktion, ohne Änderungen an der pom.xml durchführen zu müssen.

17.1 Einrichten von Maven-Profilen

Profile können in der pom.xml oder in der settings.xml definiert werden.

17.1.1 Definition in der pom.xml

<profiles>
    <profile>
        <id>development</id>
        <properties>
            <env>dev</env>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.hsqldb</groupId>
                <artifactId>hsqldb</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>production</id>
        <properties>
            <env>prod</env>
        </properties>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </profile>
</profiles>

17.1.2 Definition in der settings.xml

<profiles>
    <profile>
        <id>development</id>
        <properties>
            <env>dev</env>
        </properties>
    </profile>
    <profile>
        <id>production</id>
        <properties>
            <env>prod</env>
        </properties>
    </profile>
</profiles>
<activeProfiles>
    <activeProfile>development</activeProfile>
</activeProfiles>

17.2 Aktivieren von Maven-Profilen

17.2.1 Kommandozeile

mvn clean install -Pdevelopment

17.2.2 settings.xml

<activeProfiles>
    <activeProfile>development</activeProfile>
</activeProfiles>

17.2.3 Umgebungsvariablen

<profiles>
    <profile>
        <id>development</id>
        <activation>
            <property>
                <name>env</name>
                <value>dev</value>
            </property>
        </activation>
    </profile>
</profiles>
export env=dev
mvn clean install

17.2.4 JDK-Version

<profiles>
    <profile>
        <id>jdk-11</id>
        <activation>
            <jdk>11</jdk>
        </activation>
    </profile>
</profiles>

17.2.5 Betriebssystem

<profiles>
    <profile>
        <id>windows</id>
        <activation>
            <os>
                <family>Windows</family>
            </os>
        </activation>
    </profile>
</profiles>

17.2.6 Vorhandensein einer Datei

<profiles>
    <profile>
        <id>configFile</id>
        <activation>
            <file>
                <exists>config/settings.xml</exists>
            </file>
        </activation>
    </profile>
</profiles>

17.3 Deaktivieren von Profilen

mvn clean install -P !development

17.4 Beispielhafte Anwendung

Unterschiedliche Datenbanken für Entwicklungs- und Produktionsumgebungen:

<profiles>
    <profile>
        <id>development</id>
        <properties>
            <jdbc.url>jdbc:hsqldb:mem:devdb</jdbc.url>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.hsqldb</groupId>
                <artifactId>hsqldb</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>production</id>
        <properties>
            <jdbc.url>jdbc:mysql://prod.example.com/proddb</jdbc.url>
        </properties>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </profile>
</profiles>

Properties lassen sich über Resource Filtering im Code verwenden:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

In application.properties:

jdbc.url=${jdbc.url}

Maven-Profile ermöglichen eine flexible Konfiguration verschiedener Build-Szenarien. Sie können automatisch aktiviert werden (z.B. anhand von Umgebungsvariablen oder JDK-Versionen) oder gezielt über die Kommandozeile oder die settings.xml. Dadurch lassen sich unterschiedliche Anforderungen und Umgebungen bedienen, ohne die Hauptkonfiguration dauerhaft anzupassen.