首页 > 代码库 > 如何在Eclipse下,实现ant的web项目修改保存后,实时部署,直接刷新即可看到结果

如何在Eclipse下,实现ant的web项目修改保存后,实时部署,直接刷新即可看到结果

最近碰到了一个老项目,是ant的web项目,把项目导入到Eclipse以后,发现修改了文件之后,要先执行build.xml,再把打包好的war丢到Tomcat下,再刷新才能看到效果。由于以前没用过ant,所以自己研究了一套办法(如果ant确实有像Eclipse下修改后直接刷新就可看到结果的方法,还望众客官不吝赐教)。

本项目参考了以下4个帖子:

帖子1:  http://blog.csdn.net/futurelight/article/details/624950

帖子2: http://wenku.baidu.com/view/5aa83ac46137ee06eff918ac.html

帖子3: 如何设置Tomcat远程调试(找不到原帖地址了,请作者原谅我*_*)

帖子4: http://www.67tgb.com/?p=414


其实这一套流程的本质如下:

1. 修改Eclipse的默认配置,将当前工程的默认Builders修改为ant,再配合Eclipse的Project--Build Automatically,保证每次save都会自动调用ant进行编译(详情请参见帖子1);

2. 将编译好的结果中,Tomcat需要的文件全都copy到一个目录下(参见帖子2,并请查询ant手册或谷歌度娘);

3. 使用Tomcat远程部署(即在<%Tomcat%>/conf/Catalina/localhost目录下增加一个配置文件实现部署)的方式,完成项目部署(参见帖子2);

4. 刷新浏览器,看结果变化;

5. Eclipse远程监听、调试。


以上的详情可以参见帖子1、2,下面介绍一些细节:

a). 第1步编译时提示“找不到javax.servlet.http软件包”,将tomcat\common\lib\servlet-api.jar拷贝到jdk\jre\lib\ext目录下即可。

b). 第2步复制文件时,如果不知道复制以后文件的结构,可以将该工程先打成war,与部署解压以后的文件夹结构保持相同即可。

c). 第2步复制文件时,由于lib包通常不会发生变化,建议将lib的copy独立出来,除非引用的lib发生变化,否则不执行,这样可以节约时间。

d). 第3步要靠Web容器的远程部署支持,我自己使用的Tomcat,比较简单。如果换成其他容器,则需要容器自身的支持,或者直接在第2步时直接将相关文件复制到其他容器的指定目录。

e). 第5步中,调试需要使用远程调试,需要对Tomcat和Eclipse分别配置。Tomcat的设置方法是在start.bat的末尾(call "%EXECUTABLE%" start %CMD_LINE_ARGS%)之前增加一行,内容为:SET JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n。这里的address=8000是后面要监听的端口。Eclipse配置远程监听比较简单,使用Debug Configurations--Remote Java Application新建一个配置,选好工程,配好host、port(即上面的8000)。启动Tomcat、启动Debug,开始调试。

f). 第5步中,调试的时候容易出现“Unable to install breakpoint due to missing line number”的错误,在参考的帖子4中有非常详细的解决办法,修改即可。

g). 第5步中,使用Tomcat调试时,不要使用Eclipse内置的Server,会提示找不到项目(404错误),建议找一个Eclipse的Tomcat插件,使用这个插件启动Tomcat。


缺点:

a). save后自动执行ant脚本是通过Eclipse自身的Project--Build Automatically实现,当项目较大时,速度会比较慢,这个请自行试情况而定。

b). 由于ant灵活性较大,没有像Maven一样强制要求目录结构,所以在规划项目目录结构时请把类似的文件放到一起,否则copy的时候要写的语句会非常麻烦(吐槽一下我维护的这个旧项目,十几个配置文件放了七、八个地方,即使是他自己原来的集成语句,也写了一堆,你丫为什么当时就不把配置文件放在一起)。