Пример Maven Profiles
В этой статье мы покажем вам несколько примеров профилей Maven для передачи различных параметров (параметров сервера или базы данных) для различных сред (dev, test или prod).
P.S Tested with Maven 3.5.3
1. Основные Maven Профили
1.1 A simple profile to skip the unit test.
pom.xml
xtest true
1.2 To activate a profile, add -P
option.
Терминал
# Activate xtest profile to skip unit test and package the project $ mvn package -Pxtest
1.3 To activate multiple profiles :
Терминал
$ 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
В следующий раз текущий активный профиль будет отображаться в фазе компиляции.
Терминал
$ 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 Profiles - пример 1
Пример профиля Maven для передачи значений различных свойств средам разработки и производства.
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 сопоставит${}
вresources/db.properties
с активными свойствами профиля Maven.
Note
Прочтите этоMaven 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.
Терминал
# 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 Profiles - пример 2
Этот пример профиля Maven поместит все в файл свойств.
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. Это ключ!
Note
Прочтите этоMaven 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.
Терминал
# 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
Конец, дайте мне знать ваш случай использования :)
Скачать исходный код
$ git clone https://github.com/example/maven-examples.git
$ cd maven-profiles
Протестируйте пример 1 с профилем «prod»
$ mvn -pl example1 package -Pprod
$ java -jar example1/target/example1-1.0.jar
Протестируйте пример 2 с профилем «test»
$ mvn -pl example2 package -Ptest
$ java -jar example2/target/example2-1.0.jar