从 Eclipse 切换到 IntelliJ 后,Spring Boot 属性扩展不起作用

Chr*_*ory 6 intellij-idea spring-boot

我们的应用程序具有我们从 Maven 项目文件中动态获取的属性。

info:
  build:
    artifact: @project.artifactId@
    name: @project.name@
    description: @project.description@
    version: @project.version@
Run Code Online (Sandbox Code Playgroud)

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-application-info-automatic-expansion-maven

当我们使用 Eclipse 时,这些都不是问题,但现在转移到 InelliJ 时,除非我为这些动态属性提供一些硬编码值,否则应用程序将无法启动。

我收到此错误:

19:47:20.962 [main] INFO  com.edlogics.ElrcApplication - Spring Boot configuration: profiles = [local, chris]
19:47:20.968 [main] INFO  com.edlogics.ElrcApplication - Spring Boot configuration: properties = {}
Exception in thread "main" while scanning for the next token
found character '@' that cannot start any token. (Do not use @ for indentation)
 in 'reader', line 74, column 11:
        name: @project.name@
              ^

 org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:420)
 org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:226)
 org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingValue.produce(ParserImpl.java:586)
 org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
 org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:143)
 org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:132)
 org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:229)
 org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155)
 org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:229)
 org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155)
 org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:229)
 org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155)
 org.yaml.snakeyaml.composer.Composer.composeDocument(Composer.java:122)
...

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

我意识到这@不是一个有效的 YAML 字符,只是不确定它在 Eclipse 中是如何工作的,而不是在 IntelliJ 中

编辑:

我在原始问题中遗漏的一件事是我们有一个多模块项目。这是从 spring-boot-starter-parent 继承的项目的根 pom,它具有以下内容:

        <resources>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/application.yml</include>
                <include>**/application.properties</include>
            </includes>
        </resource>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
            <excludes>
                <exclude>**/application.yml</exclude>
                <exclude>**/application.properties</exclude>
            </excludes>
        </resource>
    </resources>
Run Code Online (Sandbox Code Playgroud)

在我们的项目中,它是一个需要过滤的子模块。application.yml 文件位于子模块的正确位置,Eclipse 似乎并不介意它是一个子模块。我知道 Eclipse 和 IntelliJ 对多模块项目的处理略有不同(Eclipse 具有扁平结构,而 IntelliJ 是分层结构)。

Chr*_*ory 12

结果证明资源过滤在 IntelliJ 中有效。@project.name@在四个属性中,有一个属性没有被正确过滤。不知何故,这在 Eclipse 中不是问题。所以我们只是从 application.yml 中删除了该属性,因为我们没有使用它。

此外,右键单击 pom.xml 并选择 Maven 然后重新导入似乎对此有所帮助。如果 IntelliJ 当前未将 yoru 项目识别为 Maven 项目,这尤其有用。 在此处输入图片说明


Muk*_*t09 9

它对我有用:

工件:'@project.artifactId@'

只需将值保留在单引号内