我想在我的应用程序中编译多个 java 文件而不重新启动 Weblogic 和 Tomcat。否则,这需要很多时间。为此,我在 Eclipse 中获得了一个 Hotswap 插件,但这并不是在所有情况下都有效。它说它适用于单个文件编译。即使我使用它,它也不是在所有情况下都有效。
有没有其他方法可以做到这一点,或者是否有任何其他插件/脚本/软件可以帮助我?
如果有一些开源的,那将非常有帮助。
提前致谢。
我想在我的应用程序中编译多个 java 文件而不重新启动 Weblogic 和 Tomcat。否则,这需要很多时间。为此,我在 Eclipse 中获得了一个 Hotswap 插件,但这并不是在所有情况下都有效。它说它适用于单个文件编译。即使我使用它,它也不是在所有情况下都有效。
有没有其他方法可以做到这一点,或者是否有任何其他插件/脚本/软件可以帮助我?
如果有一些开源的,那将非常有帮助。
提前致谢。
Java HotSpot VM 会自动执行此操作,但并非在所有情况下...
首先,您必须运行“调试”会话,而不是“运行”会话。
接下来,一些更改将强制重启。基本思想是,如果类的接口发生变化(方法 sigs,而不是实际的 Java 接口),VM 不能替换内联的类内容。
你不应该为此需要一个插件,只需要一个最近的虚拟机。
这发生在几种情况下,例如
如果您在类中引入错误,也会发生这种情况。(对于不匹配的花括号等错误)
当你保存一个 Java 文件时,eclipse 会编译它。如果出现错误,eclipse 会插入一个异常 throw 来指示存在未解决的编译错误。(这样做是为了让您在运行时不仅会看到最后一次成功的编译,而且很明显您有编译器错误)
我不知道 Eclipse,但我确实使用过 Netbeans。Netbeans 在这方面做得很好。最新版本甚至可以选择在您保存 java 文件时自动重新编译。
我知道这并不能完全回答你的问题。您可能可以同时使用 Netbeans 和 Eclipse,具体取决于您正在处理的项目的哪一部分。
编辑:使用 Tomcat,您可以重新加载网络应用程序。这只有在 Tomcat 正在查看新类时才真正有用。如果您的项目首先编译到构建目录,然后从中创建 WAR,您可以进入 Tomcat 并安装 Web 应用程序,而不是指向构建目录中的 WAR 点。
在 Tomcat 中,您可能必须在 tomcat/conf/Catalina/localhost 下放置一个站点配置文件。该文件的内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="C:/Projects/MyWebApp/build/web" path="/MyWebApp"/>
此处重新加载说明: http ://www.cs.ucl.ac.uk/teaching/java/tomcatfaq.html#changeservlet
如果你这样做几次,尽管 Tomcat 会耗尽内存。这是因为一个叫做 PermGenSpace 的东西。如果您想了解更多信息,请阅读它。解决方案是增加 JVM 内存、PermGenSize(带 -XX:MaxPermSize),最后偶尔重启 Tomcat。
EDIT2:如果重新加载应用程序导致您被注销,您可以通过将“实现可序列化”添加到您的某些类来轻松地让容器将您的会话数据序列化到磁盘。那么你应该不需要在重新加载应用程序后登录。
我同意在开发的时候一直在重新部署是非常繁琐的。
我建议您研究一下 MyEclipse,它有一个非常好的热部署机制,可以很好地与 Tomcat 配合使用,而且价格实惠,并且有 30 天的试用期。
Eclipse 中用于重新部署到服务器的现有 Java EE 机制远没有那么快。
我想我真的不明白问题出在哪里。这就是我所做的,更改几乎是瞬间加载的。我有一个 Ant 脚本,它为我编译 .java 和 .jsp 文件,将它们放在 webapps 下的适当目录中,并在必要时更改 web.xml 文件(或至少触摸它以通知 tomcat 更改)。如果您在使用 Ant 时需要帮助,我很乐意提供帮助。顺便说一句,我不使用 WAR 文件在我的测试机器上进行部署。我猜那会慢很多。
如果您阅读此页面,则非常容易完成:请参阅http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse.html 谢谢 Dan Fabulich