Maven默认处理方式
构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。
src/main/java和src/test/java:这两个目录中所有的*.java
文件会分别在compile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。
src/main/resouces和src/test/resources:这两个目录中的文件会分别被复制到target/classes和target/test-classes目录中。
target/classes:打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。
Maven项目标准目录结构
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,如下所示:
目录 | 目的 |
---|---|
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
${basedir}/src/test/resources | 测试用的资源 |
${basedir}/src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
${basedir}/target | 打包输出目录 |
${basedir}/target/classes | 编译输出目录 |
${basedir}/target/test-classes | 测试编译输出目录 |
Test.java | Maven只会自动运行符合该命名规则的测试类 |
~/.m2/repository | Maven默认的本地仓库目录位置 |
资源文件配置
资源文件是Java代码中要使用的文件。代码在执行的时候会到指定位置去查找这些文件。前面已经说了Maven默认的处理方式,但是有时候我们需要进行自定义的配置。
有时候有些配置文件通常与**.java文件一起放在src/main/java**目录(如mybatis或hibernate的表映射文件)。
有的时候还希望把其他目录中的资源也复制到classes目录中。这些情况下就需要在pom.xml文件中修改配置了。
可以有两种方法:
- 在
<build>
标签下添加<resources>
标签进行配置 <build>
标签下的的<plugins>
标签中配置maven-resources-plugin等处理资源文件的插件
配置<resources>
标签
<build>
<resources>
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/resources</directory>
<!-- filtering为true时,这时只会把过滤的文件(<excludes>)打到classpath下 -->
<!-- filtering为false时,会把不需要过滤的文件(<includes>)打到classpath下 -->
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<!-- 包含directory指定目录下的以下文件<include>和<exclude>都存在的话,这时会以<exclude>为准 -->
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
配置插件
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</build>