代码之家  ›  专栏  ›  技术社区  ›  Techmaddy

如何在不重新启动服务器的情况下编译单个/多个java文件?是否有任何Eclipse插件用于相同的应用程序?

  •  6
  • Techmaddy  · 技术社区  · 17 年前

    我希望在我的应用程序中编译多个java文件,而无需重新启动Weblogic和Tomcat。否则,这需要很多时间。为此我得到了一个 Hotswap plugin in Eclipse

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

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

    提前谢谢。

    6 回复  |  直到 12 年前
        1
  •  7
  •   krosenvold    17 年前

    一件事是编译类,但您还需要JavaVM来重新加载类并使用它们,这称为热交换。要获得最佳可用的类热交换,您需要 javarebel . 它可以让你热加载更多 types of code-changes 而不是普通的太阳。如果您在分解模式下运行部署,您就可以在家自由活动,并且可以在一秒钟左右的时间内测试任何代码更改。我们是相当受测试驱动的,所以当我组装整个应用程序时,我只在很短的阶段使用javarebel,但它工作得非常好。

        2
  •  2
  •   Scott Stanchfield    17 年前

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

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

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

    这种情况发生在以下几种情况下:

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

    如果在类中引入错误,也可能发生这种情况。(适用于不匹配的大括号等错误)

    保存Java文件时,eclipse将对其进行编译。如果有错误,eclipse将插入异常抛出,以指示存在未解决的编译错误。(这样,当您运行时,您不仅可以看到最后一次成功编译,而且可以清楚地看到您有编译器错误)

        3
  •  1
  •   Sarel Botha    17 年前

    我不知道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将耗尽内存。这是因为所谓的永久空间。如果你想知道更多的话,请仔细阅读。解决方案是增加JVM内存、PermGenSize(使用-XX:MaxPermSize)并最终偶尔重新启动Tomcat。

    如果重新加载应用程序导致您注销,您可以通过将“implements Serializable”添加到某些类中,轻松地让容器将会话数据序列化到磁盘。然后,在重新加载应用程序后,您不需要登录。

        4
  •  1
  •   Arjan Tijms Mike Van    13 年前

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

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

    Eclipse中用于重新部署到服务器的股票javaee机制速度最快。

        5
  •  0
  •   Kim Stebel    17 年前

        6
  •  0
  •   Philip    17 年前