依赖spring-boot-starter-parent后maven-resources-plugin的行为备忘录

简而言之

在使用继承spring-boot-starter-parent创建pom的项目中,如果要使用maven-resources-plugin的资源过滤功能,则需要使用@@来包围要过滤的部分,而不是${}。(在Spring Boot的手册中也提到了此事)

重要的事情

我想在使用Spring Boot的Web应用中实现缓存破坏。

试图实施

春天框架中有一个使用VersionResourceResolver来方便地添加指纹的功能,但是这次因为文件名改变会有问题,所以无法使用那个功能。因此,我们决定按照以下步骤来实现:
1. 在Maven构建时使用${maven.build.timestamp}获取日期,并将其设置到属性文件中。
2. 在HTML页面中通过thymeleaf获取该日期,并将其设置为查询字符串。

迷恋之处 zhī chù)

在我尝试以下的情况下,属性文件中没有设置构建日期。
设置应该没有错误……

...

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.5.RELEASE</version>
    <relativePath/>
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <project.build.timestamp>${maven.build.timestamp}</project.build.timestamp>
    <maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>
</properties>

...

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

...

# Cache busting
app.build.timestamp=${project.build.timestamp}
<link rel="stylesheet" type="text/css" th:href="'/css/common.css?v=' + @{__${@environment.getProperty('app.build.timestamp')}__}" />
<script type="text/javascript" th:src="'/js/commons/common.js?v=' + @{__${@environment.getProperty('app.build.timestamp')}__}"></script>

理由

辛勤搜索后,我发现答案在手册中有写。
http://stackoverflow.com/questions/35417086/maven-resource-filtering-with-spring-boot-could-not-resolve-placeholder
http://docs.spring.io/spring-boot/docs/1.3.0.RELEASE/reference/html/howto-properties-and-configuration.html#howto-use-short-command-line-arguments

在使用spring-boot-starter-parent继承创建pom的情况下,简言之,maven-resources-plugin用于过滤的令牌将从${}更改为@@。

总的来说,这样做是正确的。

# Cache busting
app.build.timestamp=@project.build.timestamp@
bannerAds