导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:290
阅读量:550290
访问量:51379
至今:
×
云标签 标签球>>
云标签 - Su的技术博客
博文->>首页 博主的更多博文>>
SpringBoot使用@project.version@出现'@' that cannot start any token. (Do not use @ for indentation)
Tags : SpringBoot,maven发表时间: 2018-05-06 00:03:37
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
比如: 转自:Su的技术博客  原文地址:

    SpringBoot使用@project.version@出现'@' that cannot start any token. (Do not use @ for indentation)....

    出现上面困扰了很久,因为自己本地springboot项目在application.yml配置文件上是可以正常读取到maven指定的版本号的,在springboot admin上面是可以正常显示version。


    如:

    info:

        version: @project.version@

    (意思也就是指定你的微服务版本,使用maven里面指定的版本)

    但是,在公司的项目,却不能使用,老是报出这样的异常:'@' that cannot start any token. (Do not use @ for indentation)....

    异常信息表明:springboot对于占位符@无法识别。

    那么有这种情况,当你的密码等信息包含@等这种特殊符号,怎么在yaml或properties上指定,这时需要使用单引号或者双引号来包起来,这样就能正常识别了。因为他也是把它当做字符处理。

    这样百思不得其解,折腾了好几个小时,翻了很多源码,是否哪里解析yaml时进行替换,一直找不到原因。在网上找了好久也没能解决或者方法给我尝试了也不是。

    就准备要睡觉了,然后心里还是有一道坎,躺到床上还是用手机进行了搜索了相关的答案,刚好这时,网上出现了这个类似的原因说明,真的太棒了。

    

    引用如下:

    你可以使用Maven的资源过滤(resource filter)自动暴露来自Maven项目的属性,如果使用spring-boot-starter-parent,你可以通过@..@占位符引用Maven项目的属性,例如:

app.encoding=@project.build.sourceEncoding@
app.java.version=@java.version@
注 如果启用addResources标识,spring-boot:run可以将src/main/resources直接添加到classpath(出于热加载目的),这就绕过了资源过滤和本特性。你可以使用exec:java目标进行替代,或自定义该插件的配置,具体查看插件使用页面。

如果不使用starter parent,你需要将以下片段添加到pom.xml中(<build/>元素内):

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>
和(<plugins/>元素内):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <delimiters>
            <delimiter>@</delimiter>
        </delimiters>
        <useDefaultDelimiters>false</useDefaultDelimiters>
    </configuration>
</plugin>
注 如果你在配置中使用标准的Spring占位符(比如${foo})且没有将useDefaultDelimiters属性设置为false,那构建时这些属性将被暴露出去。
    

    总结:

    1)springboot项目如果没有指定spring-boot-starter-parent的话,而且想要在配置文件yml或properties上使用@@来获取其它信息等,你就需要在build上增加如下配置:(这个问题就是我公司里的项目上的问题)项目启动或者打包时,IDE会自动将maven信息替换给application配置文件。

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>

    2)如果你的项目有继承spring-boot-starter-parent的话,就不用加上面的配置信息。(这个是我自己本地的项目)。


   所以,问题解决,大功告成!你知道了吧!


    


    

打赏
打赏
关注公众号
公众号
类别:微服务| 阅读(2423)| 赞 (2)
上一篇 : 关于我
评论
#12018-06-05 22:55:59
dxwszt@163.com [123.117 *] 说:
有继承spring-boot-starter-parent,还是无法识别@

#22018-08-13 22:33:28
站长 [119.122 *] 说:
@dxwszt@163.com ,可以再检查下,应该不会是其它地方了

发表评论
昵  称:

验证码:

内  容:

    同时赞一个 赞