当前位置: 代码迷 >> Web前端 >> 用Eclipse在Web项目摘引Java项目时实现热部署
  详细解决方案

用Eclipse在Web项目摘引Java项目时实现热部署

热度:427   发布时间:2012-06-29 15:48:47.0
用Eclipse在Web项目引用Java项目时实现热部署
以前也研究过Eclipse里Web Project引用Java Project的问题,没有解决,特地再深入研究了一下。
思路及实践如下:
1.Elcipse里Project Properties里有Project Reference的设置,说明有这个特性,Java Builder Path里也有引用的Projects设置。
试验:建立两个Java Project A、B,B引用A,设置B的Java Builder Path/Projects引用Project A,则B中的Class可以调用A中的Class,编译和运行都通过。
说明Eclipse对Java Project的解决方案良好。
(Project Reference的设置不知道有什么用处)
2.Web应用,使用Eclipse WTP
按上面的试验设置,(这里的B项目是一个Web项目),编译可以通过,但是运行时找不到A项目中的类。
没有找到有相应的解决方案。
3.Web应用,使用Sysdeo Tomcat Plugin
发现有这个Window/Preferences/Tomcat/Advanced/Add Java Projects to Tomcat classpath设置,将Java项目设置到Tomcat的类路径中,对Tomcat是全局的,有一些不灵活,和其它的缺陷,比如加载这些类的ClassLoader将是SystemClassLoader而不是WebAppClassLoader,这将影响某些资源文件的加载。
另外,我在Tomcat5.5.17上试验这个设置,结果启动Tomcat就出错。

看了Sysdeo的文档,它介绍了DevLoader就专门解决这个问题的。看了一下他的源码,很简单,总共只有200行,基本上的逻辑是,读取Eclipse项目下的.#webclasspath、.classpath文件以获得引用的java类路径,由
DevLoader加载这些项目外的类。
具体操作是:
1)设置Java Builder Path;
2)将Sysdeo Plugin下的DevLoader.zip解压到Tomcat目录/server/classes下,在Tomcat Project/Project Properties/Tomcat/Devloader 中选中Active DevLoader,及选中列表中项目外的classpath。
参考Sysdeo Plugin的ReadmeDevLoader.html.

这样就解决了这个问题,效果是:修改了项目A、B中的代码,不用重起Tomcat,就可以在浏览器中立即看到修改后的效果。
1 楼 LucasLee 2007-03-09  
此文章同时做为对这个帖子的回复:
(在我们的项目架构中,如何解决热部署的问题呢?)
http://www.iteye.com/my_topic/58150
2 楼 冉翔 2007-03-09  
先谢谢LZ,可是我的项目最迫切解决的是页面。关于不同的class路径加载,其实都没什么了。可就是本来在不同的目录下的页面合并到一个地方这个搞不定。

就是譬如说我真正的deploy的结构想要这样的:
root
   - user
   - master
root下面有两个目录。user和master,里面存放的都是相关的页面jsp,js之类的文件。
但是在开发环境下。可能user目录是放在/A/root/user,而master是放在/B/root/master
A
    - root
        - user
B
    - root
        - master

大约可以说是这样子的情况。
3 楼 LucasLee 2007-03-09  
冉翔 写道
先谢谢LZ,可是我的项目最迫切解决的是页面。关于不同的class路径加载,其实都没什么了。可就是本来在不同的目录下的页面合并到一个地方这个搞不定。

就是譬如说我真正的deploy的结构想要这样的:
root
   - user
   - master
root下面有两个目录。user和master,里面存放的都是相关的页面jsp,js之类的文件。
但是在开发环境下。可能user目录是放在/A/root/user,而master是放在/B/root/master
A
    - root
        - user
B
    - root
        - master

大约可以说是这样子的情况。


这个我就没办法了。我想你们应该在这样分割项目之前解决好这个问题,不是每种分割方法都方便开发的。
我想,即便是WSAD这类商业IDE也不一定支持这类分割吧。
4 楼 robbin 2007-03-09  
冉翔 写道
先谢谢LZ,可是我的项目最迫切解决的是页面。关于不同的class路径加载,其实都没什么了。可就是本来在不同的目录下的页面合并到一个地方这个搞不定。

就是譬如说我真正的deploy的结构想要这样的:
root
   - user
   - master
root下面有两个目录。user和master,里面存放的都是相关的页面jsp,js之类的文件。
但是在开发环境下。可能user目录是放在/A/root/user,而master是放在/B/root/master
A
    - root
        - user
B
    - root
        - master

大约可以说是这样子的情况。


我那法子就是教你干这个的。
5 楼 LucasLee 2007-03-09  
robbin 写道

我那法子就是教你干这个的。


你的方法是说,两个项目是在两个context里启动,我觉得他的意思是,他的两个project的文件其实是要部署在一个context里的。
那么你的方法就有局限了,如果两个project里的文件互相调用就不好办了。
6 楼 冉翔 2007-03-09  
robbin 写道
冉翔 写道
先谢谢LZ,可是我的项目最迫切解决的是页面。关于不同的class路径加载,其实都没什么了。可就是本来在不同的目录下的页面合并到一个地方这个搞不定。

就是譬如说我真正的deploy的结构想要这样的:
root
   - user
   - master
root下面有两个目录。user和master,里面存放的都是相关的页面jsp,js之类的文件。
但是在开发环境下。可能user目录是放在/A/root/user,而master是放在/B/root/master
A
    - root
        - user
B
    - root
        - master

大约可以说是这样子的情况。


我那法子就是教你干这个的。


恩,我看了。你说的是不同的apps之间如何办的。我这里是让他们依然是一个app啊。
  相关解决方案