Рубрики
Без рубрики

Пример профилей Maven

– Пример профилей Maven

Автор оригинала: 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

Рекомендации

  1. Введение в построение профилей
  2. Лучшие практики Maven
  3. Создание Для Различных Сред с помощью Maven 2
  4. Фильтрация Maven

Оригинал: “https://mkyong.com/maven/maven-profiles-example/”