我们在src/main/java下添加了自定义的xml文件,当使用idea或maven进行编译时,classes目录下并没有包含指定的xml配置文件。
maven默认认为src/main/java为*.java存储的目录,maven会使用maven-compiler-plugin插件编译该目录,将该目录下所有的.java文件编译为.class文件后,src/main/java文件夹就没有存在的必要了。maven在打包是会默认将src/main/java下的文件忽略。
解决方案
通过在<build>标签下使用<resources>标签手动更改maven的文件包含策略。
方案1、包含指定目录下的所有文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   | <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> </build>
   | 
 
方案2、包含指定目录下的指定类型的文件
1 2 3 4 5 6 7 8 9 10 11 12
   | <build>   <resources>              <resource>       <directory>src/main/java</directory>       <includes>         <include>**/*.xml</include>                 <include>**/*.properties</include>       </includes>     </resource>   </resources> </build>
   | 
 
方案3、忽略指定目录下的文件(推荐)
1 2 3 4 5 6 7 8 9 10 11
   | <build>   <resources>              <resource>       <directory>src/main/java</directory>       <excludes>         <exclude>**/*.java</exclude>       </excludes>     </resource>   </resources> </build>
   | 
 
包含 src/test/java 下的配置文件
不同于src/main/java,如果要包含src/test/java下的文件则应该将<resources>、<resource>标签替换为testResources、testResource。<includes> <excludes>用法和main目录一致。如下:
1 2 3 4 5 6 7 8 9 10
   | <build>   <testResources>     <testResource>       <directory>src/test/java</directory>       <excludes>         <exclude>**/*.java</exclude>       </excludes>     </testResource>   </testResources> </build>
   |