前言
今天打算从头创建了一个Spring Cloud项目,过程可以说是磕磕绊绊,不是依赖问题就是一些pom的问题。一度想要放弃,但还是咬牙坚持了下来。弄到最后感觉没啥问题的时候,突然发现Spring Boot既然不能读取、配置文件?好好好,这么玩是吧?
解决方案
我二话没说,反手就是百度、Bing、Google,其解决方案如下。
pom问题导致编译时没有将配置文件生成到target目录
简单来说,就是你每次启动时,一般都会重新编译并且将文件生成到target目录,如果你在target目录没有发现配置文件,说明编译时,没有将resource目录下的配置文件编译到target目录下,因此Spring Boot无法加载配置文件。
解决办法就是:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId></groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
将上述代码放在pom文件中即可。
pom的packaging问题
但是事情远远没有上述那么简单,我搜索了大半个互联网,都仅仅只有上述的解决方案,但是我不管怎么通过上述代码去改pom文件,都无济于事。正当我一筹莫展之际,我的目光锁定在了:
<packaging>pom</packaging>
我在心里暗想,这个打包方式是pom,我改成jar的话,它以jar包形式进行打包,会不会解决这个问题?于是:
<packing>jar</packing>
再次运行……成功发现target目录下生成了配置文件,真的是无语了……
后来查阅资料发现:
在Maven项目中,POM文件(Project Object Model)和JAR文件在<packaging>
元素中具有不同的含义和作用。
-
POM(pom):
-
<packaging>pom</packaging>
表示该Maven模块不会生成可执行的JAR文件,而只是一个用于管理和描述项目的元数据文件。 - POM模块通常用于组织和管理多个子模块的依赖关系,或者作为一个聚合项目,负责汇总多个子模块的构建和依赖。
-
-
JAR(jar):
-
<packaging>jar</packaging>
表示该Maven模块将生成一个可执行的JAR文件,其中包含项目的编译代码和所有依赖的库。 - JAR文件通常是用于部署和运行Java应用程序的可执行文件,这些应用程序可以被其他应用程序或系统使用。
-
通常,一个Maven项目可以包含多个模块,每个模块都有不同的 <packaging>
设置,取决于模块的角色和功能。例如,一个多模块项目可能包含一个POM模块来管理依赖和构建设置,以及多个JAR模块来构建可执行的Java应用程序或库。
总之,<packaging>pom
表示一个项目模块不生成JAR文件,而 <packaging>jar
表示一个项目模块将生成一个可执行的JAR文件。
总结
有时候一个人排查BUG真的很无助,特别是发现百度、Bing上****翻阅大半页都是一个回答,真的非常绝望。Google也发现没有类似的问题。这个时候只能完全凭借感觉以及运气来解决……