Maven项目转化出WebContent风格的目录
这篇文章已被废弃。
现在,Deolin已经比较熟悉Maven,完全可以使用Jetty插件调试、热部署项目了。
在 [SpringMVC框架下Web项目的搭建与部署] 中,提到了将tomcat的默认上下文指向项目根目录下的WebContent文件下的操作。
这样的做法能引发三个好现象。
1、开发过程中,只要不涉及到在类中新增/删除成员变量和方法,或是变更web.xml,那么对代码的修改是不需要重启tomcat的。也就是“热部署”。
2、不需要在eclipse内配置tomcat了,tomcat在外部启动,与eclispe互不影响,减少各种环境问题发生的可能。
3、结合remote debug,可以通过eclipse上的debug视窗,使调试可以随时关闭,随时开启,无需重启tomcat。
但是,还有一个问题搭建过程还有个问题需要解决,就是寻找并下载jar文件。
单纯构建Dynamic Web项目始终会面临这个问题,所以需要构建Maven项目。
但是,Deolin觉得调试开发一个Maven项目始终不如Dynamic Web项目那么习惯。
主要原因是Maven项目默认路径结构与Dynamic Web项目是不同的。
不过,可以通过配置使得Maven项目内部也拥有类似WebContent风格的目录。
创建Maven项目
首先,需要安装Maven和m2e插件。
通过在cmd中输入mvn -v和在eclipse中尝试创建Maven项目来确保这两件事
(实际上较新版本的eclipse自带了m2e的整合)
创建完成
检查一下pom.xml出现错误
缺少web.xml,通过Java EE Tools自动创建一个。
可以看出,src/main/webapp目录有成为WebContent的潜质,
不过,到目前为止,他至少还缺少/WEB-INF/classes和/WEB-INF/lib。
而且对于一个实际项目来说,它缺少的东西应该还包括类似与/img、/css……的静态资源目录
所以,需要对这个演示项目内的内容略作补充。
将目录打包成war,验证一下。
classpath、lib、web.xml齐全,JSP目录与其他静态资源也存在于正确的位置,这个war文件是可以部署的。
只要让src/main/webapp目录内部的元素跟war文件内部一致,WebContent风格的目录就算构建完成了。
变更main目录下源代码的编译输出路径
首先进入项目的Properties - Java Build Path - Source
改变默认输出路径,并让src/main/java和src/main/resources的Output folder指向它
通过操作系统的资源管理器观察一下src/main/webapp/WEB-INF
class成功地输出到了classpath中
但是,仅仅只有src/java/main,而src/java/resource并没有正确的输入到classpath中,
对于这点,需要额外的配置。
回到资源管理器
src/java/resource输出到了正确位置,这样一来,就只差lib目录了。
导出依赖库内的jar文件
这一步配置需要通过运行Maven命令来完成。
dependency:copy-dependencies -DoutputDirectory=src/main/webapp/WEB-INF/lib
观察一下src/main/webapp/WEB-INF
由于这个方法的本质是“copy”而不是“同步”,所以会有些不足之处——
每次新增项目的dependency时,都需要重新执行一次copy指令,使jar文件复制到WEB-INF/lib中。
每次减少项目的dependency时,都不会自动移除WEB-INF/lib中的jar文件,需要手动删除。
实际开发中并不会随意改变依赖库,上述不足之处实际上是可以接受的。
测试webapp目录
让tomcat的默认上下文指向%project%\src\main\webapp
在测试之前先写点简单的代码用于验证结果
src/main/java/com/temp/servlet/SimpleServlet.java
package com.temp.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class SimpleServlet extends HttpServlet { private static final long serialVersionUID = -8921022802560959642L; @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
RequestDispatcher rd = req.getRequestDispatcher("WEB-INF/view/forum.jsp");
rd.forward(req, resp);
} }
src/main/webapp/WEB-INF/view/forum.jsp
<!DOCTYPE html>
<html>
<head>
<title>forum</title>
</head>
<body>
hey, there.
</body>
</html>
启动tomcat测试一下。
测试通过。
在SimpleServlet的doGet()方法中,forum.jsp的<body>标签中追加一些内容来验证一下“热部署”。
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("random", new Random().nextInt());
RequestDispatcher rd = req.getRequestDispatcher("WEB-INF/view/forum.jsp");
rd.forward(req, resp);
}
<body>
hey, there.
<br>${random}
</body>
eclipse完成了自动编译,tomcat完成了自动部署
重新访问一下http://localhost:8080/forum
测试通过。
测试项目部署
由于上述配置没有变动Maven项目的Properties - Deployment Assembly中的任何配置(如下图),
所以由项目导出的war文件应该是完全可用的,
为了保障这点,通过下面的测试来确认一下。
将项目以war文件的形式导出到重新下载的tomcat的webapps目录下,
启动tomcat,访问localhost:8080/TempMavenApp/forum
(重新下载的tomcat中并没有配置默认上下文,所以URL中需要提供webapp的上下文)
测试通过。
至此,全部配置完成。
Maven项目转化出WebContent风格的目录的更多相关文章
- maven项目检出后报错(包括编译报错和运行报错)的常见检查处理方式
maven项目检出后报错(包括编译报错和运行报错)的常见检查处理方式: 1.更改项目的jdk为我们安装的jdk2.更改build配置里的 output folder 目录为 xxx项目名/target ...
- 如何将一个Maven项目转化成一个Eclipse项目
有时候我们需要将一个Maven项目导入到Eclipse中,直接作为一个普通的eclipse项目来导入是不行的,我们可以通过一个命令来实现:mvn eclipse:eclipse 1. 进入该Maven ...
- 解决idea中maven项目无法读取src/main/java目录下面的配置文件问题
解决idea中maven项目无法读取src/main/java目录下面的配置文件问题 当我们在maven项目中使用Mybatis的时候,需要给Mybatis配置核心xml文件(MyBatis-Conf ...
- 让低版本的 Android 项目显示出 Material 风格的点击效果
每天都被不同的需求纠缠的生活是幸福而又不幸的,这不我们家亲爱的设计师们又让我们在低版本的 Android 平台上实现一下类似于 Material Design 的点击效果. 虽然大家都知道 Mater ...
- maven项目无法读取src/main/java目录下的配置文件解决方法
我们在用Mybatis去操作底层数据库的时候,需要用到xml配置文件,一般我们是把配置文件和dao放置在同一层目录.但是在用idea操作maven项目的时候,我们可能会遇到无法读取到dao对应的map ...
- Maven项目中读取src/main/resources目录下的配置文件
在Maven项目的开发中,当需要读取src/下的配置文件时,该怎么做? 我们假设Resources下有一个文件名为kafka.properties的配置文件(为什么用kafka.properties, ...
- 解决maven项目无法读取src/main/java目录下面的配置文件问题
我们在用Mybatis去操作底层数据库的时候,需要用到xml配置文件,一般我们是把配置文件和dao放置在同一层目录. 但是在用idea操作maven项目的时候,我们可能会遇到无法读取到dao对应的ma ...
- 解决:springmvc maven 项目搭建完后没有src目录,而且maven导入很慢
前言:在搭建springmvc maven项目中遇到的问题做总结,比如搭建后没有src,同时这里也解决了搭建后maven导入很慢的问题. 问题: 1.发现创建出来的maven项目没有src文件 ,而且 ...
- Eclipse中从svn中检出maven项目
相信很多初学者都遇到过Eclipse中从SVN检出Maven项目之后看到的目录结构并不是Maven目录结构:或者只能先用SVN将Maven项目签入到本地,然后再用Eclipse导入Maven项目,但是 ...
随机推荐
- hdu 6165
虽然题解上说缩点然后判断入度就可以了,然后比赛的时候瞎暴力过了. #include <iostream> #include <cstring> #include <str ...
- 自动化测试之if __name__ == '__main__'未运行
自动化测试之if __name__ == '__main__'未运行 添加Count类 calculator.py: class Count: def __init__(self,a,b): self ...
- 总结一下C++与C#之间的区别
1,C#不支持多重继承 2.在标准的C#安全代码中不支持指针类型的操作,然而,你却能在微软所谓的“非安全代码”中操作指针类型对象. 3.C#中所有对象都只能通过关键词“new”来创建,C++的“类名_ ...
- android 蓝牙连接端(客户端)封装
0.权限 AndroidManifest.xml <uses-permission android:name="android.permission.BLUETOOTH"/ ...
- Linux 配置jdk vim和 Linux 基本操作
1下载jdk tar.gz 安装包(http://www.oracle.com/) 注意安装机器的Linux 是x86(32位)还是x64(64位)的 2使用tar -zxvf jdk.tar.gz解 ...
- meta标签常见浏览器设置
一.如何让双核浏览器默认选择 WebKit 内核渲染自己开发的网页 我们可以使用标签来指定适合自己网站的渲染内核名称,当双核浏览器访问本网页时,就会根据我们的指示,选择我们指定的渲染内核来处理网页.若 ...
- Echarts配置项详解
1.图表标题 title: { x: 'left', // 水平安放位置,默认为左对齐,可选为: // 'center' ¦ 'left' ¦ 'right' // ¦ {number}(x坐标,单位 ...
- XCode5环境下利用crash log调试线上Crash的流程
1.前言 本文主要介绍在XCode5环境下,如何根据App自己生成的crashlog来调试真机上运行时产生的crash问题. 2. 步骤 (1)构造一段会crash的代码,并放到viewDidLoad ...
- mac下自己实现re-sign.jar对apk进行重签名
利用Robotinum对给的apk文件进行自动化测试,在不知道源码的情况下,只有apk文件如何进行自动化测试呢? 首先需要对apk文件进行重签名,并获得该apk文件的包名和程序入口的类名. 最开始网上 ...
- leetcode-102.层序遍历二叉树(正序)· BTree
题面 Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to rig ...