美文网首页
SpringBoot使用@project.version@出现&

SpringBoot使用@project.version@出现&

作者: 搬运工来架构 | 来源:发表于2018-09-23 14:30 被阅读538次

    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的话,就不用加上面的配置信息。(这个是我自己本地的项目)。

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


推荐阅读

高性能Netty之对象池源码解读

高性能Netty之FastThreadLocal源码解读

Netty实战:netty 堆外内存泄露排查盛宴

必备瑞士军刀IDEA插件,你使用了哪些?

                                长按二维码识别,一键关注干货《搬运工来架构

相关文章

网友评论

      本文标题:SpringBoot使用@project.version@出现&

      本文链接:https://www.haomeiwen.com/subject/iktqoftx.html