使用场景:
项目开发过程中,我们有多种开发环境,使用pom文件统一管理配置,然后使用@xx@读取配置,报错。
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 5, column 13: active: @spring.profiles.active@
解决方案:
在pom.xml中增加如下配置:
<build>
<resources>
<resource>
<directory>src/main/resources/</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
配置详解:
这段配置是 Maven 项目中的资源配置部分,位于 pom.xml
文件中的 <build>
部分。它定义了 Maven 如何处理项目资源文件。下面是对配置的详细解释:
<resources>
元素
<resources>
元素定义了一组资源,这些资源将被包含在项目的构建过程中。在 Maven 构建生命周期中,这些资源会被复制到输出的 JAR 或 WAR 文件中。
<resource>
元素
<resource>
元素指定了一个具体的资源集合。可以有多个 <resource>
元素,每个元素定义了不同的资源集合。
directory
属性
<directory>
元素指定了资源文件所在的目录。在这个例子中,src/main/resources/
是 Maven 约定的标准目录,用于存放项目资源文件,如配置文件、属性文件等。
filtering
属性
<filtering>
属性是一个布尔值,用于指定是否对资源文件进行过滤。过滤是指 Maven 替换资源文件中的占位符(通常是 ${...}
形式的变量)为实际的值。这个值通常来自于 pom.xml
文件中的属性或者环境变量。
true
:开启过滤功能,Maven 会替换资源文件中的占位符。false
:关闭过滤功能,资源文件中的占位符不会被替换。
作用
在你提供的配置中,<filtering>true</filtering>
表示 Maven 将对 src/main/resources/
目录下的资源文件进行过滤处理。这意味着,如果这些资源文件中包含了像 ${project.version}
、${env.MY_VARIABLE}
这样的占位符,Maven 会在构建过程中将它们替换为 pom.xml
中定义的相应属性值或者环境变量值。
例如,如果你有一个 application.properties
文件,里面包含了这样的行:
app.version=${project.version}
在构建过程中,Maven 会查找 pom.xml
文件中定义的 project.version
属性,并将其值替换到 app.version
中。
这种机制非常有用,特别是在需要根据不同环境(开发、测试、生产)使用不同配置的情况下,你可以通过定义不同的 Maven 属性来实现配置的自动化替换,而不需要手动修改资源文件。
标签:xml,scanning,文件,snakeyaml,Maven,pom,报错,资源,属性 From: https://blog.csdn.net/weixin_73060959/article/details/143872333