Maven - [重要] Maven项目标准目录结构 + 资源文件导出
Maven项目的标准目录结构
- src
- main
- java 源文件
- resources 资源文件
- filters 资源过滤文件
- config 配置文件
- scripts 脚本文件
- webapp web应用文件
- test
- java 测试源文件
- resources 测试资源文件
- filters 测试资源过滤文件
- it 集成测试
- assembly assembly descriptors
- site Site
- main
- target
- generated-sources
- classes
- generated-test-sources
- test-classes
- xxx.jar
- pom.xml
- LICENSE.txt
- NOTICE.txt
- README.txt
Maven 编译默认规则
构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。
src/main/java和src/test/java
这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中。
但是这两个目录中的其他文件都会被忽略掉,例如这两个目录里的.xml和.properties文件。
src/main/resouces和src/test/resources
这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。
target/classes
打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。
资源文件的配置
资源文件是Java代码中要使用的文件。代码在执行的时候会到指定位置去查找这些文件。前面已经说了Maven默认的处理方式,但是有时候我们需要进行自定义的配置。
有时候有些配置文件通常与.java文件一起放在src/main/java目录(如mybatis或hibernate的表映射文件)。有的时候还希望把其他目录中的资源也复制到classes目录中。这些情况下就需要在Pom.xml文件中修改配置了。
可以有两种方法:
- 一是在<build>元素下添加<resources>进行配置。
- 另一种是在<build>的<plugins>子元素中配置maven-resources-plugin等处理资源文件的插件。
配置resouces节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | < build > ....... < resources > < resource > < directory >src/main/resources</ directory > < excludes > < exclude >**/*.properties</ exclude > < exclude >**/*.xml</ exclude > </ excludes > < filtering >false</ filtering > </ resource > < resource > < directory >src/main/java</ directory > < includes > < include >**/*.properties</ include > < include >**/*.xml</ include > </ includes > < filtering >false</ filtering > </ resource > </ resources > ...... </ build > |
配置资源处理插件
方法1:maven-resources-plugin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | < plugin > < artifactId >maven-resources-plugin</ artifactId > < version >2.5</ version > < executions > < execution > < id >copy-xmls</ id > < phase >process-sources</ phase > < goals > < goal >copy-resources</ goal > </ goals > < configuration > < outputDirectory >${basedir}/target/classes</ outputDirectory > < resources > < resource > < directory >${basedir}/src/main/java</ directory > < includes > < include >**/*.xml</ include > </ includes > </ resource > </ resources > </ configuration > </ execution > </ executions > </ plugin > |
方法2:build-helper-maven-plugin,这个插件也能完成相同的功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | < plugin > < groupId >org.codehaus.mojo</ groupId > < artifactId >build-helper-maven-plugin</ artifactId > < version >1.8</ version > < executions > < execution > < id >add-resource</ id > < phase >generate-resources</ phase > < goals > < goal >add-resource</ goal > </ goals > < configuration > < resources > < resource > < directory >src/main/java</ directory > < includes > < include >**/*.xml</ include > </ includes > </ resource > </ resources > </ configuration > </ execution > </ executions > </ plugin > |
打包时文件相关的配置
默认情况下,打包时target/classes目录中的资源文件会和class字节码一起被打进jar包或war包中。有时候默认的情况不能完全满足需求,如target/classes目录中的一些文件不希望打入jar包中,就需要额外配置maven-jar-plugin插件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-jar-plugin</ artifactId > < version >2.4</ version > < configuration > < excludes > < exclude >*.properties</ exclude > </ excludes > < archive > < manifest > < addClasspath >true</ addClasspath > < mainClass >xxxxxx.ConsoleLauncher</ mainClass > </ manifest > </ archive > </ configuration > </ plugin > |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?