Spring Boot filtering 不生效问题

1. Spring Boot filtering 不生效

今天在写自己的图床的时候,因为用了docker,每次在更新的时候,本地使用 dockerfile-maven-plugin 插件,打包镜像,然后 push 到 Docker hub 自己的私有仓库。然后自己的 VPS,再拉取最新的 Docker img 启动。

所以,每次在更新了 pom.xml 中的 version 后, 需要手动去更新 docker-compose.yml 文件中镜像的版本号。 为了自动做,就把 docker-compose.yml 放到了 src/main/resources 下,然后使用 mave-resources-plugin 插件 copy 到指定目录。这样在编译,打包镜像的时候,会自动更新 docker-compose.yml 文件。

但是奇怪了,项目使用了 Spring Boot,在 docker-compose.yml 中配置了 ${project.version},但是编译过后,查看,文件中的 ${project.version}并没有被替换。解决版本

1.1. 使用 Spring Boot 的方式 @xxxxx@

filtering 无效的原因是,项目继承了 spring-boot-starter-parent,查看这个 parent 的 pom.xml 文件,发现有一行:
spring-boot-starter-parent-delimiter

Spring Boot 默认使用 @xxx@ 的方式作为占位符。所以,docker-compose.yml 中配置的 ${project.version} 改成 @project.version@ 即可生效。

1.2. 继续使用 ${xxx}

pom.xml 的 build 标签中添加 maven-resources-plugin 插件,重新定义占位符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<delimiters>
<delimiter>${*}</delimiter><!-- to keep the default behavior -->
<delimiter>@</delimiter><!-- Spring Boot 的方式 -->
</delimiters>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
<nonFilteredFileExtensions><!-- 不替换的文件类型 -->
<nonFilteredFileExtension>jar</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>

这样,可以同时使用 ${xxxx}@xxxx@ 两种方式

Just for my love !!