Maven Project 转 Dynamic Web Project

Maven Project 转 Dynamic Web Project

通常的web项目, 我都习惯用 maven 来构建, 但是有时候小项目, 用不到几个依赖, 用 maven 显得比较笨重. 反而用 eclipse 的 Dynamic Web Project 更方便一些. 但是二者之间构建的目录结构不同, 抛开表面看本质, 既然都是web项目, 同样打成 war 包来运行, 最终构建出来的项目结构肯定是一样的.
先从两者之间的目录结构说起

Maven Project 结构

新建一个maven 项目 MavenDemo, 直接选 create a simle project 创建一个简单项目, 跳过选择模板. 就生成一个标准的 web 项目的目录结构
MavenDemo
其中用红线框起来的地方, 其实不是真实的磁盘目录, 是 eclipse 从磁盘目录中提取出来的, 方便书写 Java 代码和资源的.

真实的磁盘目录结构可以通过 navigator 窗口查看
在这里插入图片描述
如果项目部署到 tomcat 容器中, 在磁盘中的目录结构为, 在 MavenDemo 项目名目录下:
在这里插入图片描述

然后再来看一眼部署目录
在这里插入图片描述
这是maven项目的部署目录, Source 栏对应的是源代码的目录, Deploy Path 对于部署路径.

  • /src/main/java: java源代码, 编译后的 .class 文件存放在 classes 目录下.
  • /src/main/resource: 资源配置文件, 获取这里的文件, 例如spring配置文件中, 利用classpath: 可以获取此目录, 也就是 classes 根目录, 存放 .class 文件, 也就是 ClassLoader 所在目录, 利用 ClassLoader 可以获取此目录下文件.
  • /src/main/webapp: 对应项目根目录, 目录中含有 WEB-INF 目录, 从上图可以看出, 虽然在源代码目录结构中, Java, resource, webapp 在同一级, 但是当部署到服务器后, webapp 是对应 / 根目录, java和resource中的文件在 /WEB-INF/classes 目录中, 差了2个层级.
  • /target/m2e-wtp/web-resource: 对应项目根目录, 目录中含有 META-INF 目录, 其中主要是签名用的.
  • maven依赖jar包: 部署后在 /WEB-INF/lib 下

Dynamic Web Project 结构

直接新建一个 Dynamic Web Project 项目, 默认的目录结构, 建完以后:
在这里插入图片描述
同样的, 在磁盘的目录结构为:
在这里插入图片描述
最重要的, 还是要看部署路径:
在这里插入图片描述
同样的

  • src: 为Java文件的存放目录, 对应部署目录的 /WEB-INF/classes
  • WebContext: 包含 MATE-INFWEB-INF 两个重要的目录. WEB-INF 下还包含 lib 目录.
    到目前为止, 我们就找到了 Maven Project 和 Dynamic Web Project 两种项目结构的关联.

Maven Project 和 Dynamic Web Project 手动互转

可能 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

知道了对应关系, 只要将目录中的文件进行相对应的移动, 就可以将项目相互转换.