在一个Maven
的SpringBoot
项目中出现 ‘@‘ that cannot start any token. (Do not use @ for indentation)
异常情况。
在配置文件 application.yml
中有如下代码:
spring:
application:
name: @artifactId@
运行报如下的错误:
Caused by: 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 3, column 11:
name: @artifactId@
^
分析:
artifactId
是maven
属性,我们知道使用mavne
属性是使用${}
的方式,为什么上面使用@@
的方式呢,这是因为为了避免与SpringBoot
的变量冲突,在spring-boot-starter-parent
中mavne-resources-plugin
插件中maven
的变量被重新定义了,代码如下:
<artifactId>spring-boot-starter-parent</artifactId>
<properties>
<resource.delimiter>@</resource.delimiter>
</properties>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>${resource.delimiter}</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
到这里我们知道maven-resources-plugin
插件没有替换掉application.yml
中的maven
变量。
解决方案,让插件替换配置中的变量:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
解决 '@' that cannot start any token. (Do not use @ for indentation)