2
我们的应用程序针对我们从Maven项目文件动态获取的属性。从Eclipse切换到IntelliJ后,弹簧引导属性扩展不起作用
info:
build:
artifact: @[email protected]
name: @[email protected]
description: @[email protected]
version: @[email protected]
当我们使用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: @[email protected]
^
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
我意识到@
不是有效YAML的性格,只是不知道如何在Eclipse中工作,而不是在的IntelliJ
编辑:
我从原始问题中排除的一件事是我们有一个多模块项目。这是项目的根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>
而且在我们的项目是一个子模块是需要过滤的。 application.yml文件位于子模块的正确位置,Eclipse似乎并不介意它是子模块。我知道Eclipse和IntelliJ对待多模块项目有点不同(Eclipse具有扁平结构,而IntelliJ是分层结构)。
似乎您使用Maven机制来过滤资源,并且Eclipse在构建期间使用配置执行了maven插件,而IntelliJ则没有。我不知道你如何告诉IntelliJ这样做,但至少你有更多的关键字需要寻找。 – dunni
根据https://www.jetbrains.com/help/idea/2016.1/maven.html?origin=old_help#compile它应该开箱即用。你可能有一个自定义文件夹布局?你能显示你的pom.xml和文件夹结构吗? – dunni
完全不相关,但好消息是[你不必用1.4来做到这一点](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#production-现成的应用程序信息,版本)。说了它对我有用,所以可能会有一些与您的项目设置有关的特定内容。 –