6

我想在我的应用程序中编译多个 java 文件而不重新启动 Weblogic 和 Tomcat。否则,这需要很多时间。为此,我在 Eclipse 中获得了一个 Hotswap 插件,但这并不是在所有情况下都有效。它说它适用于单个文件编译。即使我使用它,它也不是在所有情况下都有效。

有没有其他方法可以做到这一点,或者是否有任何其他插件/脚本/软件可以帮助我?

如果有一些开源的,那将非常有帮助。

提前致谢。

4

6 回答 6

7

一件事是编译类,但您还需要 JAVA VM 重新加载类并使用它们,这称为热交换。为了获得最佳可用的类热交换,您需要javarebel之类的东西。与常规的 SUN JVM 相比,它允许您热重载更多类型的代码更改。如果您以分解模式运行部署,您就可以自由自在,并且可以在一秒钟左右的时间内测试任何代码更改。我们是相当受测试驱动的,所以我只在组装整个应用程序的那个短暂阶段使用 javarebel,但它工作得非常好。

于 2009-02-16T07:05:00.847 回答
2

Java HotSpot VM 会自动执行此操作,但并非在所有情况下...

首先,您必须运行“调试”会话,而不是“运行”会话。

接下来,一些更改将强制重启。基本思想是,如果类的接口发生变化(方法 sigs,而不是实际的 Java 接口),VM 不能替换内联的类内容。

你不应该为此需要一个插件,只需要一个最近的虚拟机。

这发生在几种情况下,例如

  • 添加方法
  • 删除方法
  • 更改方法签名
  • 更改类层次结构(超类、实现的接口)

如果您在类中引入错误,也会发生这种情况。(对于不匹配的花括号等错误)

当你保存一个 Java 文件时,eclipse 会编译它。如果出现错误,eclipse 会插入一个异常 throw 来指示存在未解决的编译错误。(这样做是为了让您在运行时不仅会看到最后一次成功的编译,而且很明显您有编译器错误)

于 2009-02-16T14:37:46.187 回答
1

我不知道 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:如果重新加载应用程序导致您被注销,您可以通过将“实现可序列化”添加到您的某些类来轻松地让容器将您的会话数据序列化到磁盘。那么你应该不需要在重新加载应用程序后登录。

于 2009-02-16T06:42:55.050 回答
1

我同意在开发的时候一直在重新部署是非常繁琐的。

我建议您研究一下 MyEclipse,它有一个非常好的热部署机制,可以很好地与 Tomcat 配合使用,而且价格实惠,并且有 30 天的试用期。

Eclipse 中用于重新部署到服务器的现有 Java EE 机制远没有那么快。

于 2009-02-16T14:03:56.377 回答
0

我想我真的不明白问题出在哪里。这就是我所做的,更改几乎是瞬间加载的。我有一个 Ant 脚本,它为我编译 .java 和 .jsp 文件,将它们放在 webapps 下的适当目录中,并在必要时更改 web.xml 文件(或至少触摸它以通知 tomcat 更改)。如果您在使用 Ant 时需要帮助,我很乐意提供帮助。顺便说一句,我不使用 WAR 文件在我的测试机器上进行部署。我猜那会慢很多。

于 2009-02-16T10:27:56.693 回答
0

如果您阅读此页面,则非常容易完成:请参阅http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse.html 谢谢 Dan Fabulich

于 2009-11-07T15:16:23.410 回答