Maven:打包后缺少资源文件
默认情况
- maven认为src/main/java只是java的源代码路径,只会把
.java
为后缀的文件进行打包 - resources目录下的文件始终都会打包进jar包或war包
问题一:XML文件放在【src/main/java】目录,不会被打包
原因:
当使用Mybatis时,把xml文件放在与mapper文件同一目录(如:src/main/java/top/testops/mapper),而maven默认不会打包src/main/java
下的非.java
后缀的文件。
解决方案:
在pom.xml
文件中,添加代码:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
问题二:【src/main/resources】目录下的文件不会被打包
表现:
当pom.xml
添加了上述配置后,再进行打包,会发现:
src/main/java
的xml文件会被一起打包src/main/resources
目录下的文件不会被打包
原因:
pom.xml
添加了上述配置后,会覆盖默认的逻辑,令Maven不会打包resources目录下的文件
解决方案:
在pom.xml
文件中,修改<resources>
为:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.jpg</include>
<include>**/*.ttf</include>
<include>**/*.xml</include>
</includes>
<excludes>
<exclude>**/*.yml</exclude>
</excludes>
</resource>
</resources>
</build>
解释:
<directory>
:该规则适用的目录。<include>
:能匹配上的,会进行打包。<exclude>
:能匹配上的,不会进行打包。与<include>
冲突时,以<exclude>
为准,即不会进行打包。**/*.yml
:该写法是为了保证各级子目录下的资源文件被打包。如过只写*.yml
,则表示只有src/main/resources
一级目录下,以yml
为后缀的文件会被打包