spring Intellij应用程序.yml抛出ScannerException从pom文件阅读标记,但不在构建中

fnvucqvd  于 2023-09-29  发布在  Spring
关注(0)|答案(1)|浏览(106)

我想引用info:app:parent中的起始父级并使用info:app:parent: @project.parent.version@。当我将它用于info:app:version: @java.version@时,这不是问题,但当我这样做时,它会抛出以下异常:

11:28:01.627 [restartedMain] ERROR org.springframework.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 17, column 13:
        parent: @project.parent.version@
                ^

此外,当我使用info:app:parent: @parent@时,这不是一个问题,但当我使用info:app:parent: @parent.version@时,这是一个问题。
我不明白,所以我用mvn使用mvn package -DskipTests构建了应用程序,并使用以下参数mvn spring-boot:run -D"spring-boot.run.profiles"=prod -D"spring-boot.run.arguments"="<args>"运行它,当我点击执行器端点获取信息时,我得到了父版本。我重新加载了pom.xml,运行了mvn clean,使缓存无效,并重新启动intellij,但这些都没有工作。我正在运行Java 21与Sping Boot Parent 3.1.4。降级到java 17和spring Boot parent 3.1.3并没有解决这个问题。我的项目结构很好,运行配置与我在pom文件中指定的java版本对齐。这是intellij的一个问题,我想知道是否有人遇到过这种情况。用单引号括起来只是给我占位符,使用^代替@是一样的。谢谢

j7dteeu8

j7dteeu81#

TLDR:将新元素<app.version>${parent.version}</app.version>添加到properties元素并引用它。Maven将注入父版本的任何值,因此您不必维护此标记。
我已经确认这是IDE的问题,因为当我用maven构建应用程序时不会发生这种情况。我升级到2023.2.2,问题仍然存在。升级snakeyaml版本不能解决此问题。唯一的解决方案是在属性中创建一个新标记并引用它。@parent.artifactId@@parent.groupId@工作正常。添加一个单引号会抛出一个异常(除了属性文件),但奇怪的是,这并不影响注入maven属性,这使我能够确认@parent.version@是唯一没有被注入的maven属性。
另外,使用属性文件而不是yml文件不会有什么不同:该特定标签不被注入。

相关问题