Maven Project 转 Dynamic Web Project
通常的web项目, 我都习惯用 maven 来构建, 但是有时候小项目, 用不到几个依赖, 用 maven 显得比较笨重. 反而用 eclipse 的 Dynamic Web Project 更方便一些. 但是二者之间构建的目录结构不同, 抛开表面看本质, 既然都是web项目, 同样打成 war 包来运行, 最终构建出来的项目结构肯定是一样的.
先从两者之间的目录结构说起
Maven Project 结构
新建一个maven 项目 MavenDemo, 直接选 create a simle project
创建一个简单项目, 跳过选择模板. 就生成一个标准的 web 项目的目录结构
其中用红线框起来的地方, 其实不是真实的磁盘目录, 是 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-INF
和WEB-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 |
知道了对应关系, 只要将目录中的文件进行相对应的移动, 就可以将项目相互转换.