【日常Exception】第二十一回:IDEA Maven构建配置文件失效,target中未正确出现对应环境的配置文件

热门系列:


1.问题

前些天,部门负责人重建项目仓库,博主将原来的项目重新检出!之后就直接开发需求了,没有出现什么问题。后来,开始自测代码时,发现项目启动不了。直接报了{\color{DarkRed} \mathbf{logback.xml}}这个文件找不到了!!!

接着先查看了一下项目文件是否有存在,再看了一下{\color{DarkRed} \mathbf{target}}包下面的文件,发现文件是有的,但是没有按照配置打包对应环境的配置文件。。。

也就是说,问题出在:maven打包的配置文件不对,导致启动报错

下面看下配置文件打包后的对比图:

打包之后,正确的配置文件路径应该如图一所示!将指定环境env的配置文件,打包到classes目录下,而不是打包所有环境的配置文件!!!


2.分析

①一开始以为是因为项目重建仓库,冲捡之后,导致某些配置文件出错,导致打包出现问题!!

排除方式:后来和旁边的同事确认,他们是可以正常启动的,所以排除此种可能。

②Idea种的maven配置问题,导致打包错误

排除方式:重新配置maven的环境变量、重新设置idea的maven配置、重启IDEA后,都尝试无果,此种可能也几乎排除!

③maven本地仓库原因(为什么这么说,请先看下图)

看截图中的提示,{\color{DarkRed} \textsc{Configure Maven home}},maven环境变量已经配置成功了,所以我删除了本地maven库,重新下载了一次,但是也没能解决!所以,此可能性,也排除!

④pom.xml文件的配置错误

一般我们打包的文件,主要就是通过pom.xml文件中的一下配置:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>application.yml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

但是,身边同事也没有改过此类配置文件,所以,既然他可以启动,那说明跟配置文件没有关系!问题应该出在,我自己的IDEA和Maven上。

⑤重新检查IDEA中的maven配置

我的Maven配置如图:

但是,配置对照了一些帖子,基本没有什么不同!只有调整了上图中的红色方框标注的选项,如果选择第一个选项 {\color{DarkRed} \textsc{Dont't detect}} ,重新build项目,打包文件会改变!虽然,环境配置文件出现在了classes目录下,但是另外一个config目录中的文件却不见了。再对照几个帖子中的配置,这里的选项应该是第二选项(截图中这个),所以配置问题导致,也基本排除!


3.解决

上面那些分析和尝试之后,仍然没能解决!此时,我想一般人应该也会有一点抓狂了吧!但是,崩溃和懊恼是解决不了问题的。所以,仍然赖着性子,冷静思考问题可能出在哪里?

最终我将可能性放在了,上面第④条分析的配置文件上了,因为这里是最直接影响打包文件的配置。我看到配置中的这个设置:

<filtering>true</filtering>

这个作用是用来:打包时能替换文件名,也能替换文件里面的标识符。而我们的配置中正好,正好也有用到

<resource>
    <directory>src/main/resources/env/${env}</directory>
    <includes>
        <include>*.*</include>
        <include>**/*.xml</include>
        <include>**/*.properties</include>
    </includes>
    <filtering>true</filtering>
</resource>

所以,考虑是不是这个 ${env} 没取到值,所以导致打包失败!于是,我尝试把 <filtering>改成了:

<filtering>false</filtering>

重试build项目,成功啦!!!但是,再重新设置回来为 true ,也是可以打包成功的!

是不是感觉有点莫名其妙?到头来,等于什么都没改动,又可以了!!!!但是,我个人分析,应该是IDEA或Maven在加载pom里的配置时,并没有全量重新加载,亦或是有缓存机制所导致。。那么变动一下,重新设置,则会刷新原来的缓存之类的旧配置内容了,因此才可以正常加载了!!!

以上为个人实践结论,若有不对,或是有知道具体原因的朋友,欢迎博文下方留言,探讨~~~

在这里插入图片描述

善良勤劳勇敢而又聪明的老杨 CSDN认证博客专家 Java
一个喜欢学习,热爱分享的Java技术人!The more you know, the more you don't know!
微信搜索关注时代名猿,免费领取VIP精品学习视频、BAT大厂面试资料、IT技术电子书籍
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页