通常的web项目, 我都习惯用 maven 来构建, 但是有时候小项目, 用不到几个依赖, 用 maven 显得比较笨重. 反而用 eclipse 的 Dynamic Web Project 更方便一些. 但是二者之间构建的目录结构不同, 抛开表面看本质, 既然都是web项目, 同样打成 war 包来运行, 最终构建出来的项目结构肯定是一样的.
先从两者之间的目录结构说起
新建一个maven 项目 MavenDemo, 直接选 create a simle project
创建一个简单项目, 跳过选择模板. 就生成一个标准的 web 项目的目录结构
其中用红线框起来的地方, 其实不是真实的磁盘目录, 是 eclipse 从磁盘目录中提取出来的, 方便书写 Java 代码和资源的.
真实的磁盘目录结构可以通过 navigator 窗口查看
如果项目部署到 tomcat 容器中, 在磁盘中的目录结构为, 在 MavenDemo 项目名目录下:
然后再来看一眼部署目录
这是maven项目的部署目录, Source 栏对应的是源代码的目录, Deploy Path 对于部署路径.
.class
文件存放在 classes 目录下.classpath:
可以获取此目录, 也就是 classes 根目录, 存放 .class
文件, 也就是 ClassLoader 所在目录, 利用 ClassLoader
可以获取此目录下文件.WEB-INF
目录, 从上图可以看出, 虽然在源代码目录结构中, Java, resource, webapp 在同一级, 但是当部署到服务器后, webapp 是对应 /
根目录, java和resource中的文件在 /WEB-INF/classes
目录中, 差了2个层级.META-INF
目录, 其中主要是签名用的.直接新建一个 Dynamic Web Project 项目, 默认的目录结构, 建完以后:
同样的, 在磁盘的目录结构为:
最重要的, 还是要看部署路径:
同样的
/WEB-INF/classes
MATE-INF
和 WEB-INF
两个重要的目录. WEB-INF
下还包含 lib
目录.可能 eclipse 支持一些自动转换, 我没有去研究.
因为我们知道了 Maven Project 和 Dynamic Web Project 最终都是要转换为部署到 tomcat的 war 包, 而 war 包中的结构是固定的. 所以, 我们就找到了两种项目相互转换的依据.
对应关系:
Maven Project | Dynamic Web Project | Deploy Path |
---|---|---|
src/main/java | src | WEB-INF/classes |
src/main/resource | src | WEB-INF/classes |
src/main/webapp/(内有WEB-INF) | WebContext(内有WEB-INF, MATE-INF) | / |
/target/m2e-wtp/web-resource(内有MATE-INF) | WebContext/MATE-INF | / |
maven依赖jar包 | WebContext/WEB-INF/lib | /WEB-INF/lib |
知道了对应关系, 只要将目录中的文件进行相对应的移动, 就可以将项目相互转换.