【问题标题】:Sysdeo Tomcat DevLoader - Hot deploy of java class causes whole application to restartSysdeo Tomcat DevLoader - java 类的热部署导致整个应用程序重新启动
【发布时间】:2010-06-01 03:00:37
【问题描述】:

我在 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 控制台视图所示

[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 为我进行构建(它确实如此)。

【问题讨论】:

    标签: tomcat eclipse-plugin


    【解决方案1】:

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

    来自 Tomcat 网站:

    如果您希望 Catalina 监视 /WEB-INF/classes/ 和 /WEB-INF/lib 中的类的更改,则设置为 true,并在检测到更改时自动重新加载 Web 应用程序。此功能在应用程序开发期间非常有用,但它需要大量运行时开销,因此不建议在已部署的生产应用程序中使用。这就是该属性的默认设置为 false 的原因。但是,您可以使用 Manager Web 应用程序来按需触发重新加载已部署的应用程序。

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

    【讨论】:

      【解决方案2】:

      如果你不需要加载 DevLoader,并且错误地点击了 Eclipse 中的某些内容:打开 server.xml,删除指向 DevLoader 的 Context,然后尝试启动 Tomcat。您不会收到任何错误(前提是您不需要 Devloder)。

      【讨论】:

      • 嗨瓦尼,也许我在陈述我的问题时不清楚。我希望能够更改 java 代码(当我在 tomcat/sysdeo/eclipse 中调试它时)。我的问题是,一旦我保存了 java 类(使用自动构建),tomcat 就会开始重新加载整个应用程序,这会浪费 80-100 秒。那么有没有办法在应用程序在eclipse中运行(调试)时使用tomcat的sysdeo插件“热部署”java类
      猜你喜欢
      • 2019-10-27
      • 2019-12-22
      • 2019-03-23
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多