如何将编译时Maven定义的属性传递给spring-boot应用程序?

时间:2016-06-20 08:10:49

标签: maven spring-boot

当我使用war插件时,我可以这样做:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
          <archive>
            <manifest>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
            </manifest>
            <manifestEntries>
              <Implementation-Build>${buildNumber}</Implementation-Build>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>

在我的src / main / resources中,我有一个文件(build.properties)将它映射到Spring Environment属性:

build.revision=${buildNumber}

使用spring-boot-maven-plugin有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:2)

Using spring-boot-starter-parent给你(根据文件)

  

针对application.properties和application.yml的合理资源过滤,包括特定于配置文件的文件(例如application-foo.properties和application-foo.yml)&#34;。由于默认配置文件接受Spring样式占位符($ {...}),因此Maven过滤更改为使用@ .. @占位符(您可以使用Maven属性resource.delimiter覆盖它)。

因此,application.properties中的@buildNumber@可能适合您。

我不确定&#34;合理过滤&#34;适用于其他(非应用程序配置)资源文件(例如您的build.properties)。也许也可以尝试一下。

Pure Maven选项:

你可以opt in to the Maven resource filtering

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

这将重写您的${variable}表达式。

如果您的文件中不应该接受此处理(例如包含运行时占位符或二进制文件的文件),您还可以设置单独的resources-filtered目录。