tomcat - Sysdeo Tomcat DevLoader - Java 类的热部署导致整个应用程序重新启动

标签 tomcat eclipse-plugin

我在 Windows XP 上使用 sysdeo tomcat 插件 3.2.1 和 eclipse 3.5.1 (Galileo) 和 tomcat 5.5.23。 我可以让 tomcat 插件在 eclipse 中工作,并将 devloader.zip 提取到 [tomcat]\server\classes 中。 我还更新了上下文,现在它有这个条目:

<Context path="/myapp1" reloadable="true" docBase="F:\Work\eclipse_workspace\myapp1" workDir="F:\Work\eclipse_workspace\myapp1\work" >
    <Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>
    <Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" />
</Context>

我已经激活了 devloader(在 Project > Properties > Tomcat > Devloader Classpath 中)并“检查”了我所有的类和 jar,我还没有“检查”commons-loggin.jar jsp-api.jar、servlet-api .jar.

因此,在通过插件启动 tomcat 时,我可以使用 devloader 运行它,如 eclipse 控制台 View 所示

[DevLoader] Starting DevLoader
[DevLoader] projectdir=F:\Work\eclipse_workspace\myapp1
[DevLoader] added file:/F:/Work/eclipse_workspace/myapp1/WEB-INF/classes/
[DevLoader] added file:/F:/Work/eclipse_workspace/myapp1/WEB-INF/lib/activation.jar

但是,即使我将一个 System.out.println 添加到任何 java 文件中并保存它,整个应用程序都会重新加载(大约需要 80 秒),这与停止/启动 tomcat 本身一样好。 我试过在 catalina.bat 的 JAVA_OPTS 中添加 -Xdebug 但没有成功:(

能否请您指导我可能做错的地方..

请注意,我可以在 tomcat 上“重新部署”整个应用程序,但这不是我所需要的,我希望能够在编码/调试时“即时”对 java 类进行小的更改,而不必等待完整的应用重启。另一个烦恼是重启tomcat/application导致session/debug进度丢失..

你能指导我如何去做吗?

PS:我没有明确使用任何 ant/maven 脚本,只是依靠 eclipse 为我做构建(它确实如此)。

最佳答案

我知道这是一个旧线程,但是如果您从 Context 条目中删除 reloadable="true" 会怎么样?

来自 Tomcat 站点:

Set to true if you want Catalina to monitor classes in /WEB-INF/classes/ and /WEB-INF/lib for changes, and automatically reload the web application if a change is detected. This feature is very useful during application development, but it requires significant runtime overhead and is not recommended for use on deployed production applications. That's why the default setting for this attribute is false. You can use the Manager web application, however, to trigger reloads of deployed applications on demand.

我不确定 true 在那里为您做了什么,因为当我用它 false (或不存在)进行代码更改时,它仍然会找到更改并热部署它们(尽管我将 docBase 设置为我的工作目录)。如果将新类或 JAR 添加到相应的路径,也许会更有用?或者如果你不使用你的工作目录作为你的文档库?是的,我敢打赌后一种情况更多,这样 Eclipse/Tomcat 会发现本地代码中的更改,然后将其推送到远程版本(相对于 Eclipse,不一定是你的机器)......所以如果你设置您的 docBase 到您的工作目录,您可能永远不需要将 reloadable 设置为 true

关于tomcat - Sysdeo Tomcat DevLoader - Java 类的热部署导致整个应用程序重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947069/

相关文章:

java - Tomcat 保持 webapp api 运行

html - 带 tomcat 的 Azure Windows 服务器不显示完整的 html 页面

android - Eclipse 的 Tomcat 插件

eclipse - Spring Tool Suite 仪表板错误

java - EGit - "Replace With Commit..."无法正常工作

java - 使用 Apache 的双向 SSL 是否需要任何 Tomcat 设置?

tomcat - OpenShift、Tomcat7 和 JDBC 领域

android - 如何将 SDK 示例项目复制到工作区中?

java - 有状态 Eclipse 插件 - 用于域模型的 OSGi bundle ?

java - 如何忽略svn中的所有eclipse项目文件