maven资源文件的相关配置
构建Maven项目的时候,如果没有进行特殊的配置,Maven会默认按照标准的目录结构查找和处理各种类型文件。
src/main/java和src/test/java
这两个目录中的所有*.java文件会分别在compile和test-compile阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。如下图:src/main/java/com/demo.xml文件在编译时被忽略(src/test/java截图略)
src/main/resouces和src/test/resources
如上图可看出这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。
target/classes
打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。
资源文件的配置
资源文件是Java代码中要使用的文件。代码在执行的时候会到指定位置去查找这些文件。前面已经说了Maven默认的处理方式,但是有时候我们需要进行自定义的配置。
有时候有些配置文件通常与.java文件一起放在src/main/java目录(如mybatis或hibernate的表映射文件)。有的时候还希望把其他目录中的资源也复制到classes目录中。
解决办法
为了使JAR插件正确地捆绑资源,您可以在Pom.xml文件中,在<build></build>节点中配置resources节点
配置resources节点
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<build>
...
<resources>
<resource>
<targetPath>/plexus</targetPath>
<filtering>false</filtering>
<directory>${basedir}/src/main/plexus</directory>
<includes>
<include>configuration.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude> <!-- **/ 为固定写法-->
</excludes>
</resource>
</resources>
<testResources>
...
</testResources>
...
</build>
</project>
- resources:是资源元素的列表,每个元素描述与此项目关联的文件的内容和位置。
- targetPath:指定资源文件编译后放置的目录,根目录是target/classes,如上则在目录target/classes/plexus下。
- filtering:为真或假,表示是否要为此资源启用筛选。
- directory:此元素的值定义在何处找到资源。构建的默认目录是${basedir}/src/main/resources。
- include:一组文件模式,指定要包含的文件作为指定目录下的资源,使用*作为通配符。
- exclude:与include相同的结构,但指定忽略哪些文件。
- testResources: testResources元素块包含testResource元素。它们的定义类似于资源元素,但在测试阶段自然会使用它们。