Я использую 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», указанным в профиле теста?