Maven Profiles Beispiel
In diesem Artikel zeigen wir Ihnen einige Beispiele für Maven-Profile, mit denen Sie verschiedene Parameter (Server- oder Datenbankparameter) für verschiedene Umgebungen (dev, test oder prod) übergeben können.
P.S Tested with Maven 3.5.3
1. Grundlegende Maven-Profile
1.1 A simple profile to skip the unit test.
pom.xml
xtest true
1.2 To activate a profile, add -P
option.
Terminal
# Activate xtest profile to skip unit test and package the project $ mvn package -Pxtest
1.3 To activate multiple profiles :
Terminal
$ mvn package -P xtest, another-profile-id # multi modules, same syntax $ mvn -pl module-name package -P xtest, another-profile-id
1.4 Always add maven-help-plugin
to display the active profile during the compile or package phase, it will save you a lot of debugging time.
pom.xml
org.apache.maven.plugins maven-help-plugin 3.1.0 show-profiles compile active-profiles
Das nächste Mal wird das aktuell aktive Profil in der Kompilierungsphase angezeigt.
Terminal
$ mvn compile -P xtest [INFO] --- maven-help-plugin:3.1.0:active-profiles (show-profiles) @ example1 --- [INFO] Active Profiles for Project 'com.example:example1:jar:1.0': The following profiles are active: - xtest (source: com.example:example1:1.0)
2. Maven-Profile - Beispiel 1
Maven-Profilbeispiel zur Übergabe verschiedener Eigenschaftswerte an Entwicklungs- und Produktionsumgebungen.
2.1 A properties file.
resources/db.properties
db.driverClassName=${db.driverClassName} db.url=${db.url} db.username=${db.username} db.password=${db.password}
2.2 Enable the filtering. Maven ordnet die${}
inresources/db.properties
den aktiven Maven-Profileigenschaften zu.
Note
Lesen Sie dieseMaven filtering
pom.xml
src/main/resources true
2.3 Create two profiles ids (dev and prod) with different properties values.
pom.xml
maven-profiles com.example 1.0 4.0.0 example1 dev true env dev com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/dev example 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 prod env prod com.mysql.jdbc.Driver jdbc:mysql://live01:3306/prod example 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 src/main/resources true org.apache.maven.plugins maven-shade-plugin 3.2.0 package shade com.example.example1.App1
2.4 Loads the properties file and print it out.
App1.java
package com.example.example1; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class App1 { public static void main(String[] args) { App1 app = new App1(); Properties prop = app.loadPropertiesFile("db.properties"); prop.forEach((k, v) -> System.out.println(k + ":" + v)); } public Properties loadPropertiesFile(String filePath) { Properties prop = new Properties(); try (InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream(filePath)) { prop.load(resourceAsStream); } catch (IOException e) { System.err.println("Unable to load properties file : " + filePath); } return prop; } }
2.5 Test it.
Terminal
# default profile id is 'dev' $ mvn package $ java -jar target/example1-1.0.jar db.password:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 db.driverClassName:com.mysql.jdbc.Driver db.username:example db.url:jdbc:mysql://localhost:3306/dev # enable profile id 'prod' with -P prod or -D env=prod $ mvn package -P prod $ mvn package -D env=prod $ java -jar target/example1-1.0.jar db.password:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 db.driverClassName:com.mysql.jdbc.Driver db.username:example db.url:jdbc:mysql://live01:3306/prod
3. Maven-Profile - Beispiel 2
Dieses Maven-Profilbeispiel fügt alles in die Eigenschaftendatei ein.
3.1 A properties file, later Maven will map the value depend on the profile id.
resources/config.properties
# Database Config db.driverClassName=${db.driverClassName} db.url=${db.url} db.username=${db.username} db.password=${db.password} # Email Server email.server=${email.server} # Log Files log.file.location=${log.file.location}
3.2 Create different properties files for dev,test and production environment.
resources/env/config.dev.properties
# Database Config db.driverClassName=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/dev db.username=example db.password=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 # Email Server email.server=email-dev:8888 # Log Files log.file.location=dev/file.log
resources/env/config.test.properties
# Database Config db.driverClassName=com.mysql.jdbc.Driver db.url=jdbc:mysql://test01:3306/test db.username=example db.password=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 # Email Server email.server=email-test:8888 # Log Files log.file.location=test/file.log
resources/env/config.prod.properties
# Database Config db.driverClassName=com.mysql.jdbc.Driver db.url=jdbc:mysql://live01:3306/prod db.username=example db.password=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 # Email Server email.server=email-prod:25 # Log Files log.file.location=prod/file.log
3.3 Enable the filtering. Das ist der Schlüssel!
Note
Lesen Sie dieseMaven filtering
pom.xml
maven-profiles com.example 1.0 4.0.0 example2 dev true dev prod prod test test src/main/resources/env/config.${env}.properties src/main/resources true *.properties org.apache.maven.plugins maven-shade-plugin 3.2.0 package shade com.example.example2.App2
3.4 Loads the properties file and print it out.
App1.java
package com.example.example2; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class App2 { public static void main(String[] args) { App2 app = new App2(); Properties prop = app.loadPropertiesFile("config.properties"); prop.forEach((k, v) -> System.out.println(k + ":" + v)); } public Properties loadPropertiesFile(String filePath) { Properties prop = new Properties(); try (InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream(filePath)) { prop.load(resourceAsStream); } catch (IOException e) { System.err.println("Unable to load properties file : " + filePath); } return prop; } }
3.5 Test it.
Terminal
# profile id dev (default) $ mvn package $ java -jar target/example2-1.0.jar log.file.location:dev/file.log db.password:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 db.driverClassName:com.mysql.jdbc.Driver db.username:example email.server:email-dev:8888 db.url:jdbc:mysql://localhost:3306/dev # profile id prod $ mvn package -P prod $ java -jar target/example2-1.0.jar log.file.location:prod/file.log db.password:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 db.driverClassName:com.mysql.jdbc.Driver db.username:example email.server:email-prod:25 db.url:jdbc:mysql://live01:3306/prod # profile id test $ mvn package -P test $ java -jar target/example2-1.0.jar log.file.location:test/file.log db.password:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 db.driverClassName:com.mysql.jdbc.Driver db.username:example email.server:email-test:8888 db.url:jdbc:mysql://test01:3306/test
Das Ende, lassen Sie mich Ihren Anwendungsfall wissen :)
Quellcode herunterladen
$ git clone https://github.com/example/maven-examples.git
$ cd maven-profiles
Testen Sie das Beispiel 1 mit dem Profil 'prod'
$ mvn -pl example1 package -Pprod
$ java -jar example1/target/example1-1.0.jar
Testen Sie das Beispiel 2 mit dem Profil 'test'
$ mvn -pl example2 package -Ptest
$ java -jar example2/target/example2-1.0.jar