2016-04-25 34 views
2

我们的应用程序针对我们从Maven项目文件动态获取的属性。从Eclipse切换到IntelliJ后,弹簧引导属性扩展不起作用

info: 
    build: 
    artifact: @[email protected] 
    name: @[email protected] 
    description: @[email protected] 
    version: @[email protected] 

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: @[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是分层结构)。

+0

似乎您使用Maven机制来过滤资源,并且Eclipse在构建期间使用配置执行了maven插件,而IntelliJ则没有。我不知道你如何告诉IntelliJ这样做,但至少你有更多的关键字需要寻找。 – dunni

+0

根据https://www.jetbrains.com/help/idea/2016.1/maven.html?origin=old_help#compile它应该开箱即用。你可能有一个自定义文件夹布局?你能显示你的pom.xml和文件夹结构吗? – dunni

+0

完全不相关,但好消息是[你不必用1.4来做到这一点](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#production-现成的应用程序信息,版本)。说了它对我有用,所以可能会有一些与您的项目设置有关的特定内容。 –

回答

2

原来,资源过滤在IntelliJ中工作。在未被正确过滤的四个中有一个属性@[email protected]。不知何故,这在Eclipse中不是问题。所以我们只是从application.yml中删除了这个属性,因为我们没有使用它。

相关问题