未将spring.profiles.active ist设置为Maven构建的命令行上指定的配置文件名称

时间:2019-02-24 17:39:30

标签: spring maven spring-boot

我使用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在应用程序属性中正确替换为测试配置文件中指定的“测试”值?

2 个答案:

答案 0 :(得分:0)

总而言之,您尝试通过以下步骤指定活动配置文件

    通过使用<activeByDefault>标签(在您的情况下为dev配置文件)
  1. 包括了默认配置文件
  2. 在运行Maven时使用选项-P
  3. 设置其他活动配置文件(在您的情况下为test配置文件)

似乎两个配置文件都被激活,从而:

  1. 配置文件test用于命名已构建的工件
  2. 配置文件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也遇到同样的问题。