Maven - при компиляции проекта мне нужно активировать профили - PullRequest
0 голосов
/ 07 мая 2020

Мне нужно установить активные профили для jar-файлов при компиляции проекта загрузки maven spring.

Ниже приведены два моих подхода, которые пытались активировать профили.

Первый подход - профили не активируются

 mvn clean package -Dspring-boot.run.profiles=dev help:active-profiles
 -s settings.xml

*

Вышеупомянутая команда не устанавливает активные профили при выполнении jar-файлов

 java -jar package.jar

Я использую зависимости плагина maven для активации первого подхода

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring.boot.version}</version>
            <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
   </executions>  </plugin> </plugins></build>

Второй подход - работает должным образом.

 mvn clean package -Dspring.profiles.active=dev help:active-profiles -s
 settings.xml

 java -jar -Dspring.profiles.active=dev package.jar

Я использую многомодульная родительская структура pom для проекта. Кто-нибудь, пожалуйста, посоветуйте работать с первым подходом?

1 Ответ

1 голос
/ 07 мая 2020

Maven - это система build . Он отвечает за создание вашего артефакта. Профили Maven - это, по сути, инструмент, который позволяет немного изменить процесс сборки в зависимости от различных факторов (операционные системы, версия java и т. Д.). Они определены в файлах maven (pom.xml)

Spring (и, конечно, Spring boot), в отличие от maven, это среда выполнения framework. Профили Spring - это нечто совершенно иное - они позволяют загружать разные bean-компоненты, разрешать разные конфигурации во время выполнения (читайте после вызова java -jar app.jar) в зависимости от определений профиля.

Так что не путайте с тем же именем, это всего лишь «случайное совпадение»

Теперь что касается вашего вопроса.

Maven собирает артефакт и упаковывает его для этого, используя плагин для весенней загрузки maven. Если вы хотите настроить этот процесс сборки - используйте профили maven (и, как следствие, help:effective-profiles иногда может быть удобно).

Когда артефакт собран - вы можете его запустить. Для этого вы можете использовать профили Spring для определения времени выполнения в вариантах: - Адреса баз данных - Учетные данные - Некоторые подсистемы вашего продукта, которые не будут запускаться локально, и т. Д., Этот список действительно зависит от приложения

Существует возможность запустить приложение весенней загрузки прямо из maven, и для этого вы действительно можете использовать -Dspring.profiles.active=dev, но если вы его не запускаете (и вы не используете ни один из предложенных подходов прочтите о mvn spring-boot:run, чтобы понять, что на самом деле означает запуск приложения Spring Boot во время сборки), затем:

Первый подход:

 mvn clean package -Dspring-boot.run.profiles=dev help:active-profiles
 -s settings.xml

-Dspring- boot.run.profiles здесь не имеет значения - вы ничего не делаете с ним (опять же, вы не запускаете проект во время сборки), поэтому он ничего не делает

java -jar package.jar

Здесь вы действительно можете указать профили пружин с --spring.profiles.active=dev,whatever

Второй подход:

mvn clean package -Dspring.profiles.active=dev help:active-profiles -s
 settings.xml

Опять же, -Dspring.profiles.active=dev не имеет значения, он ничего не делает.

java -jar -Dspring.profiles.active=dev package.jar

Здесь вы делаете указать список активных проф iles (точно так же, как --spring.profiles.active, с точки зрения весенней загрузки это то же самое) Вот почему приложение работает во время выполнения, как ожидалось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...