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.
Profile können in der pom.xml oder in der
settings.xml definiert werden.
<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><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>mvn clean install -Pdevelopment
<activeProfiles>
<activeProfile>development</activeProfile>
</activeProfiles><profiles>
<profile>
<id>development</id>
<activation>
<property>
<name>env</name>
<value>dev</value>
</property>
</activation>
</profile>
</profiles>export env=dev
mvn clean install
<profiles>
<profile>
<id>jdk-11</id>
<activation>
<jdk>11</jdk>
</activation>
</profile>
</profiles><profiles>
<profile>
<id>windows</id>
<activation>
<os>
<family>Windows</family>
</os>
</activation>
</profile>
</profiles><profiles>
<profile>
<id>configFile</id>
<activation>
<file>
<exists>config/settings.xml</exists>
</file>
</activation>
</profile>
</profiles>mvn clean install -P !development
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.