Tomcat无法更新类

最近遇到一个非常困扰的问题,在Eclipse。我修改了一个类,但是无论如何tomcat都没有更新类。

先给出我的方案,删除旧的工作空间文件夹(或更改名称、位置)。

因为我是弃用了旧的工作空间,并新建了新的工作空间。目前我发现的原因是因为JRebel的监听的旧的工作空间的项目,并把编译好的类扔给内存中运行的Tomcat容器(查看JRebel的介绍,JRebel是会保留该类的所有现有实例)。所以,我在Tomcat的部署目录下看到的是新的编译好的类,但是实际上Tomcat运行的是旧的类。

2070425-2418881a061fc251.png

JRebel是会保留该类的所有现有实例

 


背景,因svn恢复并迁移(因文件损坏,svn服务器回滚到了一个月前的版本,并切换了新的地址)。我弃用并备份了旧的工作空间,重新检出了新的svn,并在Eclipse重新建立新的工作空间并导入项目,但是发现有一个项目无论如何都无法更新类,发现一直都是运行旧的类。我尝试了以下的方法:

  • 常规的Clean Up Project
  • 常规的Clean Up Tomcat 目录,甚至整个类删除,启动依然正常。
  • 更换Tomcat的部署目录。
  • 重新建立新的工作空间,并重新导入项目。
  • 打开调试,能够进入调试。但是发现断点的位置和运行的不一致。初步怀疑运行的不是最新的.class。
  • 怀疑是代码有错,Eclipse跳过最新版本的编译。但是,观察Tomcat部署的路径,核对.class文件的更新时间,并打开.class查看,的确是最新的代码。
  • 再三确认,Tomcat的运行路径,完全正确。
  • 怀疑是JRebel插件的问题,关闭JRebel插件。问题依旧。
  • 怀疑是nginx的进程没有关闭完全,指向了其他的机器。但是控制台是正常打印的旧的类,完全关闭nginx进程并尝试,失败。
  • 怀疑是内存驻留了旧的代码,重启计算机。重新发布运行。还是旧的类。
  • 从Eclipse更换至Intellij,还是一样。仍旧运行旧的类。

事情的转折

  • 在开启JRebel 情况下,观察控制台,发现JRebel 监听的路径是旧的路径,但是天真的以为JReble监听的路径和Tomcat运行的没有关系。**但是去查看JRebel的工作原理,就可以发现如果是监听的旧的工作空间,那么JRebel会把旧的类丢给tomcat容器运行,而你无法发现。因为Tomcat的部署目录是没有任何变化的**。

2070425-a757717e2a45a13c.png

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值