神奇的mapping 文件夹

一个 maven 项目中 Source Dir 里面有除了 .java 的文件

然而这种情况下,IDEA 会按照 maven 的方式来 make, build
所以在 target/classes 中并不会出现资源文件(.xml 等)

项目中用到了 mybatis-spring

所以会在 source dir 中出现 mapping/*.xml 等
生成的 target/classes 也需要将 source dir 中的 .xml

怎么办呢?!

好吧,前前后后花费了大概三天,四五个小时。
之前的问题在于 maven package 中报错,.xml 找不到,我还一直没理解,原来就是因为 target/classes 中 确实 没有相应的 .xml 文件。

队友用的 eclipse 毫无这个问题

这是怎么回事呢?
http://stackoverflow.com/questions/12444683/why-xml-files-in-eclipse-projects-source-directory-is-not-copied-to-target-clas
这篇就解答了,实际上 eclipse 默认会将资源文件复制到输出目录中。。。好吧

IDEA 要怎么复制呢?

http://stackoverflow.com/questions/11176969/intellij-how-to-make-non-java-files-copied-to-the-bin-directory-as-well
这篇是相关问题的汇总。
但即使是在 Compiler | Resource Patterns 中添加 ?*.xml 甚至 **.*.xml 依然不能解决,我猜想原因在于 IDEA 识别出了 maven 项目,会按照它的方式来处理资源文件(*.xml 等)

解决办法

解决办法在第一个链接中已经提到
在 pom.xml 中添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
<build>
<resources>
<resource>
<!-- This include everything else under src/main/java directory -->
<directory>${basedir}/src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<finalName>flyeagle</finalName>
...
</build>

或者参考http://blog.csdn.net/u012599988/article/details/44041205,插入

1
2
3
4
5
6
7
8
9
10
11
12
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
...
</build>

这时再次 build,世界都清净了!