Автор оригинала: mkyong.
В этой статье мы покажем вам несколько примеров профиля Maven для передачи различных параметров (параметров сервера или базы данных) для разных сред (разработки, тестирования или разработки).
P.S Протестировано с Maven 3.5.3
1. Основные профили Maven
1.1 Простой профиль для пропуска модульного теста.
xtest true
1.2 Чтобы активировать профиль, добавьте опцию -P
.
# Activate xtest profile to skip unit test and package the project $ mvn package -Pxtest
1.3 Для активации нескольких профилей:
$ mvn package -P xtest, another-profile-id # multi modules, same syntax $ mvn -pl module-name package -P xtest, another-profile-id
1.4 Всегда добавляйте maven-help-плагин
для отображения активного профиля на этапе компиляции или упаковки, это сэкономит вам много времени на отладку.
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.mkyong:example1:jar:1.0': The following profiles are active: - xtest (source: com.mkyong:example1:1.0)
2. Профили Maven – Пример 1
Пример профиля Maven для передачи различных значений свойств в среды разработки и производства.
2.1 Файл свойств.
db.driverClassName=${db.driverClassName} db.url=${db.url} db.username=${db.username} db.password=${db.password}
2.2 Включите фильтрацию. Maven сопоставит ${}
в ресурсы/бд.свойства
с активными свойствами профиля Maven.
src/main/resources true
2.3 Создайте два идентификатора профилей (dev и prod) с различными значениями свойств.
maven-profiles com.mkyong 1.0 4.0.0 example1 dev true env dev com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/dev mkyong 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 prod env prod com.mysql.jdbc.Driver jdbc:mysql://live01:3306/prod mkyong 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 src/main/resources true org.apache.maven.plugins maven-shade-plugin 3.2.0 package shade com.mkyong.example1.App1
2.4 Загружает файл свойств и распечатывает его.
package com.mkyong.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 Протестируйте его.
# 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:mkyong 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:mkyong db.url:jdbc:mysql://live01:3306/prod
3. Профили Maven – Пример 2
Этот пример профиля Maven поместит все в файл свойств.
3.1 Файл свойств, позже Maven сопоставит значение в зависимости от идентификатора профиля.
# 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 Создайте различные файлы свойств для среды разработки, тестирования и производства.
# Database Config db.driverClassName=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/dev db.username=mkyong db.password=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 # Email Server email.server=email-dev:8888 # Log Files log.file.location=dev/file.log
# Database Config db.driverClassName=com.mysql.jdbc.Driver db.url=jdbc:mysql://test01:3306/test db.username=mkyong db.password=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 # Email Server email.server=email-test:8888 # Log Files log.file.location=test/file.log
# Database Config db.driverClassName=com.mysql.jdbc.Driver db.url=jdbc:mysql://live01:3306/prod db.username=mkyong db.password=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 # Email Server email.server=email-prod:25 # Log Files log.file.location=prod/file.log
3.3 Включите фильтрацию. Это и есть ключ!
maven-profiles com.mkyong 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.mkyong.example2.App2
3.4 Загружает файл свойств и распечатывает его.
package com.mkyong.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 Протестируйте его.
# 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:mkyong 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:mkyong 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:mkyong email.server:email-test:8888 db.url:jdbc:mysql://test01:3306/test
В конце, дайте мне знать ваш вариант использования 🙂
Скачать Исходный Код
# Протестируйте пример 1 с помощью профиля “prod” $mvn-pl пример1 пакет -Pprod $java-jar example1/target/example1-1.0.jar
# Протестируйте пример 2 с помощью профиля “тест” $mvn-pl пакет примера 2 -Ptest $java-jar example2/target/example2-1.0.jar
Рекомендации
- Введение в построение профилей
- Лучшие практики Maven
- Создание Для Различных Сред с помощью Maven 2
- Фильтрация Maven
Оригинал: “https://mkyong.com/maven/maven-profiles-example/”