1. 传统的web工程目录结构
src目录及config目录(自定义的source folder目录)下的文件都会被拷贝到WEB-INF\classes目录中当然java文件不会被拷贝,由对应的class文件替换
WebRoot目录下存放jsp文件
WEB-INF目录下存放classes目录(在开发工具中不显示,实际存在,存放src中被编译后的文件)、lib目录(存放工程依赖的jar包)、web.xml(web核心文件)
1.1. 导出的工程目录结构
这就是硬盘上该项目对应的真实目录结构
这里的.classpath、.project、.tern-project、.settings目录都是eclipse给我们生成的一些项目额外信息,不做讨论,可以忽略,不会造成任何影响
- 首先会导出source folder目录即config、src
- 然后会导出核心目录WebRoot,该目录下包含jsp文件、及WEB-INF目录,而WEB-INF目录下又包含核心文件web.xml、classes目录(开发者开发的类及资源配置文件)、lib目录(项目所依赖的jar包)
小节:其实对比于IDE中的目录结构,硬盘上真实的目录结构只是多了一个classes目录而已
1.2. 导出的war包目录结构
与导出的工程目录结构(项目真实的目录结构)相比只是去掉了source folder(开发者源文件)而已
2. maven工程目录结构
如果是web项目,那么要在src\main目录下新建webapp\WEB-INF目录,并且在WEB-INF目录下新建一个web.xml文件
2.1. 导出的工程目录结构
传统的web工程中的source folder通常为src,而maven工程为src\main\java、src\main\resources、src\test\java、src\test\resources, 这样在硬盘上会生成对应的目录结构,但与传统web工程具有同样的一个特性即:会将source folder目录下的"开发文件"会拷贝到classes目录中,这里将src\main\java看作一个source folder,只是名字取成这样而已
通常来说classes目录会存于WebRoot\WEB-INF\目录下,但是maven工程将classes目录从WEB-INF中迁移出来并存于target目录下
真实结构也不再有lib目录,pom.xml文件即可完成项目依赖,换句话说可以实现开发了,只不过在打成war包时,从本地仓库中找到需要的jar并拷贝到lib目录中即可
2.2. 导出的war包目录结构
对于传统的web工程生成的war包目录结构而言,只是在META-INF\目录下多了一个maven目录而已,该目录下的文件夹命名为groupID\ArtifactId,pom.properties描述的是项目的GAV信息,pom.xml就没啥好说的
总体而言,maven生成的war包目录结构与传统的一致,显然是为了兼容性
3. 总结
- maven工程与传统工程目录结构差异
- 传统工程WebRoot在工程当前目录下,而maven在src\main目录下
- 传统classes目录存于WebRoot\WEB-INF目录下,maven存于target目录下
- 传统的jar包存在于WEB-INF\lib目录下,而maven用pom.xml来代替,在项目导出的时候减少容量
- 传统的source folder为一级即src,而maven是多级,造成真实目录结构有出入,但拷贝"开发文件"(即开发者开发的class文件与资源文件)到classes目录下的特性不变
- maven工程与传统工程相同点
- 生成的war包目录结构基本一致