Tomcat无法编译加载class文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat无法编译加载class文件相关的知识,希望对你有一定的参考价值。

第一次部署项目正常运行,后面修改了java文件,tomcat则无法加载,重新部署,重新启动都不行!
拜托,我都说了手工部署,重启服务器都无效,还要热部署,问题是现在为什么不加载更新过的class或者更新过的java没有被编译

参考技术A 这个估计是你java虚拟机的问题,启动了多个虚拟机了,你可以用任务管理器查看,找到名叫“java”或者“myeclipse”的进程,将多余的那个关掉,如果只有一个该进程的话,建议删掉部署文件,重启电脑后在发布,应该这样就ok了的!祝你好运!追问

能启动多个虚拟机?如果是这样的话,tomcat是无法启动的!一个是myeclipse的虚拟机,一个是tomcat的环境,目前我没有使用第三个虚拟机!

追答

java进程,是java进程,搞错了,把多余的那个关掉!具体请参照图片!

追问

晕死。。。跟你解释不通。。。怎么可能会有多余的进程呢?俩个软件,启动时才会有java进程,如果没有关闭的话,tomcat和myeclipse是无法重新启动的,既然俩个软件正常运行了,就不会有多的了,ok?

参考技术B 我建议你将开发环境先关闭,在打开试试,有时候是由于加载的次数过多导致的一些问题,再者你可以将tomcat中的class文件先全部删除,再重新加载尝试一下。很多时候不是大问题导致的,是一些环境本身的问题。追问

将tomcat的工作目录删除确实能解决这个问题,可是你不会叫每次改一个东西然后测试之前都去删工作目录吧,很影响工作效率,还有情绪

参考技术C 修改了java文件后,要重新编译后,才能产生最新的class文件,之前的class文件可以手工删掉。你的情况可能就是没有编译产生新的class文件。tomcat一直加载的是你修改前的class文件追问

情况是这个情况,可是你总不能叫我每次修改后都去删class文件吧,影响工作效率呀!我知道临时解决的方法,我现在需要的是,让tomcat正常

参考技术D 也就是你的tomcat能启动,但是无法加载你的项目?是IDE工具自动部署的?部署成功,但是tomcat不给你加载?报错怎么报的啊追问

是这个情况,ide,tomcat都正常,能运行,项目也能部署,也能编译,也能运行,,问题出在修改java文件后,重新部署,编译,在运行项目时,还是加载原来的class的,也就是说修改后的java没有编译或者说编译了没有加载到tomcat?

追答

这个啊,你把work下面的文件给删了,tomcat就会重新编译了,这个算不上错误,可能是缓存导致的。

追问

老大,看看楼上的,我都说了我知道怎么临时解决这个问题,但是我不能每次修改后都去删work吧,老大,帮忙找个能不这么麻烦的

追答

额,tomcat的配置文件中能够配置的啊,更改java后也自动编译,有这个选项的。。

追问

拜托,我都说了手工部署,重启服务器都无效,还要热部署,问题是现在为什么不加载更新过的class或者更新过的java没有被编译

追答

tomcat的bin下有个startup.bat,编辑这个文件,在call "%EXECUTABLE%" start %CMD_LINE_ARGS%之前,加上deltree %cd%\work /s/e
这样,在tomcat启动之前,自动删除work下得所有文件

在startup.bat中的call之前加上deltree %cd%\work /s/e
这样在启动之前就会吧work里的东西全删了

在startup.bat中的call之前加上deltree %cd%\work /s/e
这样在启动之前就会吧work里的东西全删了

在startup的call之前加上deltree %cd%\work /s/e
这样就在启动之前自动吧work清空了

应该是rmdir /s/q %cd%\work

第5个回答  2011-11-01 是不是java的编译级别一致。追问

什么意思?仔细说说

为啥在eclipse中修改JSP后tomcat自动重启?

参考技术A tomcat会每隔一段时间查询jsp的版本是否一致,自动加载,所以修改jsp后,tomcat会自动重启,不用用户重新发布工程。
tomcat启动后class文件会接受请求加载到jvm中。而对jsp第一次请求时,会先编码成对应的.class文件加载进来。以后每一次请求tomcat容器要检查jsp的版本,如果与前一次不一样,则会自动再次编码并加载.class文件。
参考技术B 你修改jsp,tomcat会重新编译成servlet,然后jvm加载他,有时候就会触发tomcat重新加载整个应用,并不是重启。当加载的次数多了,就有可能造成permgen内存溢出

以上是关于Tomcat无法编译加载class文件的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat类加载机制

mac编译java时生成class文件但运行时显示找不到或无法加载主类

图解Tomcat类加载机制

JSP更换class文件后,一定要重启Tomcat吗?

读取资源文件信息

java 编译成功,运行class文件出现“找不到或无法加载主类”,啥原因?