如何在不重启服务器的情况下编译单个/多个java文件?是否有相同的Eclipse插件?

时间:2009-02-16 06:21:36

标签: java compilation eclipse-plugin

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

有没有其他方法可以做到这一点,还是有其他插件/脚本/软件可以帮助我吗?

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

先谢谢。

6 个答案:

答案 0 :(得分:7)

有一件事是编译类,但您还需要JAVA VM来重新加载类并使用它们,这称为热交换。要获得最佳的热交换课程,您需要javarebel之类的内容。它允许您比常规SUN JVM热重新加载types of code-changes更多。如果您在爆炸模式下运行部署,那么您可以免费使用,并且可以在一秒左右的时间内测试任何代码更改。我们是相当测试驱动的,所以当我组装整个应用程序时,我只在这个短暂的阶段使用javarebel,但它工作得非常好。

答案 1 :(得分:2)

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

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

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

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

在某些情况下会发生这种情况,例如

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

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

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

答案 2 :(得分:1)

我不了解Eclipse,但我确实使用Netbeans。 Netbeans做得很好。最新版本甚至可以选择在保存java文件时自动重新编译。

我知道这并不能完全回答你的问题。您可以使用Netbeans和Eclipse,具体取决于您正在处理的项目的哪个部分。

编辑: 使用Tomcat,您可以重新加载Web应用程序。这只有在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: 如果重新加载应用程序会导致您注销,则可以通过向某些类添加“implements Serializable”来轻松地让容器将会话数据序列化到磁盘。然后,您不需要在重新加载应用程序后登录。

答案 3 :(得分:1)

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

我建议你看一下MyEclipse,它有一个非常好的hotdeploy机制,可以很好地与Tomcat一起使用,而且价格实惠且有30天的试用期。

Eclipse中用于重新部署到服务器的Java EE机制远远不够快。

答案 4 :(得分:0)

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

答案 5 :(得分:0)