一.背景
近期在弄SpringBoot启动通过配置文件处理多环境,使用maven的profile来处理,配置文件当中有@profiles.active@。正常启动没有问题,因为添加了resource的过滤
1.正常启动配置
<build>
<finalName>rules_admin</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<!-- 资源根目录排除各环境的配置,防止在生成目录中多余其它目录 -->
<excludes>
<exclude>**/application-**.yml</exclude>
</excludes>
</resource>
</resources>
</build>
2.打包启动报错
但是因为要打包,把项目当中resources下的application*的相关文件打包到jar外侧,因此使用了maven-resources-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
</plugin>
然而,打完包后,java -jar 启动提示
2024-06-24 14:50:40.127 ERROR 44484 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed
org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token
found character '@' that cannot start any token. (Do not use @ for indentation)
in 'reader', line 56, column 13:
active: @profiles.active@
^at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:439) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:248) ~[snakeyaml-1.29.jar:na]
二、处理
试了很多方式,发现在maven-resources-plugin当中也要加上个<filtering>true</filtering>
1.原始的配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>i18n/**</include>
<include>bootstrap*</include>
<include>**/application.yml</include>
<include>**/application-${profiles.active}.yml</include>
<include>logback.xml</include>
</includes>
</resource>
</resources>
</configuration>
<executions>
...
</executions>
</plugin>
2.添加filtering
<plugin>
<configuration>
<resources>
<resource>
<filtering>true</filtering>
</resource>
<resources>
</configuration>
</plugin>
3.完整配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>i18n/**</include>
<include>bootstrap*</include>
<include>**/application.yml</include>
<include>**/application-${profiles.active}.yml</include>
<include>logback.xml</include>
</includes>
</resource>
</resources>
</configuration>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
<outputDirectory>
${project.build.directory}/out/
</outputDirectory> <!-- 表示把配置文件拷到和jar包同一个路径下 -->
<resources>
<resource>
<directory>src/main/resources/</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
再次打包后,启动就没有问题了