我使用Spring Boot 2.1.3.RELEASE并存在以下问题:
我使用由Spring Initializr创建的标准Spring Boot项目。 我通过在pom.xml中指定以下内容来设置maven资源过滤:
<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”配置文件的值放在application.properties文件中,作为spring.profiles.active。
那么我在做什么错了,我怎么能实现一个Maven构建,其中将spring.profiles.active在应用程序属性中正确替换为测试配置文件中指定的“测试”值?
答案 0 :(得分:0)
总而言之,您尝试通过以下步骤指定活动配置文件:
<activeByDefault>
标签(在您的情况下为dev
配置文件)-P
test
配置文件)似乎两个配置文件都被激活,从而:
test
用于命名已构建的工件dev
用作属性spring.profiles.active
的值。请按照Maven: The Complete Reference - 5.4. Listing Active Profiles中的说明运行mvn help:active-profiles
,以列出当前的活动配置文件。
一种技巧是避免使用<activeByDefault>
,而是通过在运行Maven时仅通过 -P
选项来激活配置文件。
答案 1 :(得分:0)
我遇到了完全相同的问题。但是,我注意到关闭开发IDE并手动执行maven命令后,问题消失了。 最终,我将其追溯到Visual Studio Code IDE中的Java:AutoBuild设置。禁用设置解决了该问题。 Eclipse BTW也遇到同样的问题。