Spring-Boot-Reference-Guide

40.4.1. 在构建时期自动扩展info属性

你可以使用已经存在的构建配置自动扩展info属性,而不是对在项目构建配置中存在的属性进行硬编码。这在Maven和Gradle都是可能的。

使用Maven自动扩展属性

对于Maven项目,你可以使用资源过滤来自动扩展info属性。如果使用spring-boot-starter-parent,你可以通过@..@占位符引用Maven的'project properties'。

project.artifactId=myproject
project.name=Demo
project.version=X.X.X.X
project.description=Demo project for info endpoint
info.build.artifact=@project.artifactId@
info.build.name=@project.name@
info.build.description=@project.description@
info.build.version=@project.version@

:在上面的示例中,我们使用project.*来设置一些值以防止由于某些原因Maven的资源过滤没有开启。Maven目标spring-boot:run直接将src/main/resources添加到classpath下(出于热加载的目的)。这就绕过了资源过滤和自动扩展属性的特性。你可以使用exec:java替换该目标或自定义插件的配置,具体参考plugin usage page

如果你不使用starter parent,在你的pom.xml你需要添加(处于元素内):

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

和(处于内):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <delimiters>
            <delimiter>@</delimiter>
        </delimiters>
    </configuration>
</plugin>

使用Gradle自动扩展属性

通过配置Java插件的processResources任务,你也可以自动使用来自Gradle项目的属性扩展info属性。

processResources {
    expand(project.properties)
}

然后你可以通过占位符引用Gradle项目的属性:

info.build.name=${name}
info.build.description=${description}
info.build.version=${version}