spring.profiles.active ist не установлен на имя профиля, указанное в командной строке для сборки maven - PullRequest
0 голосов
/ 24 февраля 2019

Я использую Spring Boot 2.1.3.RELEASE и имею следующую проблему:

Я использую стандартный проект весенней загрузки, созданный с помощью Spring Initializr.Я настроил фильтрацию ресурсов maven, указав в файле pom.xml следующее:

<build>
...
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>
</build>

В application.properties я указал следующее:

spring.profiles.active=@spring.profiles.active@

И я определил следующие профили в pom.xml:

<profiles>
  <profile>
    <id>dev</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <spring.profiles.active>dev</spring.profiles.active>
    </properties>
    <build>
      <finalName>${project.artifactId}-dev-${project.version}</finalName>
    </build>
  </profile>
  <profile>
    <id>test</id>
    <properties>
      <spring.profiles.active>test</spring.profiles.active>
    </properties>
    <build>
      <finalName>${project.artifactId}-test-${project.version}</finalName>
    </build>
  </profile>
  <profile>
    <id>prod</id>
    <properties>
      <spring.profiles.active>prod</spring.profiles.active>
    </properties>
    <build>
      <finalName>${project.artifactId}-prod-${project.version}</finalName>
    </build>
  </profile>
</profiles>

Стандартный тестовый класс определяется как:

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("dev")
public class DocumentComposerApplicationTests {

    @Test
    public void contextLoads() {
    }

}

Теперь, когда я запускаю следующую команду maven:

mvn clean package -Ptest

Затем создается следующий артефакт:

app-test-1.0.0.war

Но в файле application.properties есть следующее:

spring.profiles.active=dev

Таким образом, Maven правильно строит артефакт с помощью профиля "test", заданного в командной строке.Но фильтрация ресурсов помещает значение из профиля "dev" как spring.profiles.active в файл application.properties.

Итак, что я делаю не так и как мне добиться сборки maven там, где пружина.profiles.active будет корректно заменен в свойствах приложения значением «test», указанным в профиле теста?

1 Ответ

0 голосов
/ 24 февраля 2019

Подводя итог, вы попытались указать активный профиль , выполнив следующие действия:

  1. включил профиль по умолчанию с помощью тега <activeByDefault> (в вашемв случае профиля dev
  2. установить дополнительный активный профиль, используя опцию -P при запуске maven (в вашем случае профиль test)

Похоже, активировались оба профиля, в результате чего:

  1. профиль test использовался для именования встроенного артефакта
  2. профиль dev использовался в качестве значения для свойства spring.profiles.active.

Пожалуйста, запустите mvn help:active-profiles, как описано в Maven: полный справочник - 5.4.Список активных профилей для отображения текущих активных профилей.

Один трюк состоит в том, чтобы избегать <activeByDefault> и вместо этого активировать профиль, передавая только параметр -P при запуске maven.

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