Как передать выбранный профиль Maven в профиль Spring? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть 3 maven проекта A, B, C. A - родительский проект B, а B - родительский C. Все профили определены в pom.xml проекта A .

В проекте C я пытаюсь выбрать файл свойств в контексте Spring-Test (в разделе src / test / resources ) на основе выбранного профиля. Для регрессионных тестов , у нас есть 2 файла свойств:

  • application-test-local.properties
  • application-test.properties

В нашей системе разработки Windows выбранный профиль будет «локальным» и, соответственно, на серверах. Когда выбран «локальный» профиль, следует использовать application-test-local.properties и application-test.properties в противном случае в контексте теста Spring. В проекте C , в spring-test-context.xml я пробовал:

<beans profile="docker">
    <util:properties id="metaDbProps"  location="application-test-local.properties"/>
 </beans>
 <beans profile="default">
    <util:properties id="metaDbProps"  location="application-test.properties"/>
 </beans>

Однако, похоже, что приложение не может передать выбранный профиль Maven в профиль Spring, поскольку я пытаюсь "mvn clean test -Pdocker" , и он всегда выбирает файл свойств из " default"профиль.

Есть идеи, что исправить, чтобы передать профиль maven в профиль пружины, чтобы он мог подобрать нужный файл свойств?

Для понимания вот как определяются профили в проекте A:

<profiles>
     <!-- Windows development  -->
    <profile>
        <id>docker</id>
        <activation/>
        <properties>
            <INSTALL_MACHINE_LIST>localhost</INSTALL_MACHINE_LIST>
            <COPY_MODE>local</COPY_MODE>
        </properties>
    </profile>
    <!-- Development -->
    <profile>
        <id>dev</id>
        <activation/>
        <properties>
            <INSTALL_MACHINE_LIST>dev01</INSTALL_MACHINE_LIST>
        </properties>
    </profile>
    <!-- QA -->
    <profile>
        <id>qa</id>
        <activation/>
        <properties>
            <INSTALL_MACHINE_LIST>dqa01</INSTALL_MACHINE_LIST>
        </properties>
    </profile>
    <!-- Production -->
    <profile>
        <id>prod</id>
        <activation/>
        <properties>
            <INSTALL_MACHINE_LIST>prod01</INSTALL_MACHINE_LIST>
        </properties>
    </profile>
</profiles>

1 Ответ

0 голосов
/ 09 ноября 2018

По умолчанию тесты Maven выполняются с Maven Surefire Plugin . Вы можете объявить профили Spring как свойство в своем профиле Maven:

<profile>
  <id>docker</id>
  <properties>
    <spring.profiles.active>docker</spring.profiles.active>
  </properties>
</profile>

и затем передайте его в Surefire, используя <argLine> конфигурацию:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <argLine>-Dspring.profiles.active=@{spring.profiles.active} @{argLine}</argLine>
      </configuration>
    </plugin>
  </plugins>
</build>

Обратите внимание, что синтаксис @{...}:

Поскольку в версии 2.17 используется альтернативный синтаксис для argLine, @ {...} допускает позднюю замену свойств при запуске плагина, поэтому свойства, которые были изменены другими плагинами, будут выбраны правильно

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