Exemple de profils Maven
Dans cet article, nous allons vous montrer quelques exemples de profils Maven pour passer différents paramètres (paramètres de serveur ou de base de données) pour différents environnements (dev, test ou prod).
P.S Tested with Maven 3.5.3
1. Profils de base Maven
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
La prochaine fois, le profil actif actuel sera affiché en phase de compilation.
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. Profils Maven - Exemple 1
Exemple de profil Maven pour transmettre différentes valeurs de propriétés aux environnements de développement et de production.
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 mappera les${}
dansresources/db.properties
avec les propriétés de profil Maven actives.
Note
Lire ceciMaven 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. Profils Maven - Exemple 2
Cet exemple de profil Maven mettra tout dans le fichier de propriétés.
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. Telle est la clé!
Note
Lire ceciMaven 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
La fin, faites-moi savoir votre cas d'utilisation :)
Télécharger le code source
$ git clone https://github.com/example/maven-examples.git
$ cd maven-profiles
Testez l'exemple 1 avec le profil «prod»
$ mvn -pl example1 package -Pprod
$ java -jar example1/target/example1-1.0.jar
Testez l'exemple 2 avec le profil «test»
$ mvn -pl example2 package -Ptest
$ java -jar example2/target/example2-1.0.jar