我在Windows XP上使用带有eclipse 3.5.1(Galileo)和tomcat 5.5.23的sysdeo tomcat插件3.2.1。 我可以在eclipse中使用tomcat插件,并将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&gt; Properties&gt; Tomcat&gt; 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导致会话/调试进度丢失..
你能指导我如何去做。
PS:我没有明确地使用任何ant / maven脚本,只是依靠eclipse来为我做构建(它确实如此)。
答案 0 :(得分:0)
如果您不需要加载DevLoader,并且您在Eclipse中单击了某些内容:打开 server.xml ,删除指向DevLoader的Context,然后尝试启动Tomcat。您不会收到任何错误(假设您不需要Devloder)。
答案 1 :(得分:0)
我知道这是一个旧线程,但是如果从Context条目中取消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
。