我想引用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的一个问题,我想知道是否有人遇到过这种情况。用单引号括起来只是给我占位符,使用^
代替@
是一样的。谢谢
1条答案
按热度按时间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文件不会有什么不同:该特定标签不被注入。