最近项目遇到一个很奇怪的bug导致项目识别不了application.yml
文件,spring项目中通常资源文件夹为src/main/java/resources
。但项目需要额外引入其他jar包,所以放入了lib
中并把其当做资源文件夹,项目project struct如下:
执行过程后发现无法识别application中的配置,直接给出报错。
No active profile set, falling back to default profiles: default
然而使用maven打包后的jar文件却意外可以正确读取配置文件并执行,这就很有意思了。那么就需要了解IDEA默认执行spring项目的工作机制,以及它的build和maven打的jar包之间的区别。
Build and Run
从Build项目中可以看出IDEA是把项目按照module来进行build的。默认会把整个项目输出到target
中,并且会把module编译后输出到target/classes
中。build的规则主要会根据project struct和pom.xml两者规定。项目build后输出内容大致如下:
可以看到这边有两个classes
,就感觉是因为这层嵌套问题导致原本的application.yml
无法被读取到。先看一下可运行jar包里的项目结构: