【问题标题】:Play! Java web framework. How does their development server compile automatically?玩! Java 网络框架。他们的开发服务器如何自动编译?
【发布时间】:2011-03-07 23:11:43
【问题描述】:

看完剧后!我发现它自带的开发服务器能够自动编译 .java 文件并立即显示更改,这真的很有成效。没有每隔几秒左右运行一次的热部署程序扫描仪。当您点击刷新时会发生编译,它比我的增量mvn package 快得多。他们是怎么做到的?

我想知道,因为我有兴趣知道,但也因为我不想使用整个 Play!我的小项目的框架。我只对他们的开发编译过程感兴趣,因为我想采用它:)。

有什么想法吗?

【问题讨论】:

标签: java playframework


【解决方案1】:

我今天早上才读到这个。它实际上会获取您更改的 source 文件并在内部使用 Eclipse Java 编译器 (ECJ),然后再将编译后的文件发送到内置的开发服务器。

问题是,您可能想努力将 ECJ 连接到您的“小项目”中。

你绝对可以近似它 - 诀窍是做一个 mvn 包,而是你想将改变的 .class 文件放到文件系统上你的 webapp 的分解的 warfile 目录中。

如果您未绑定到特定的应用服务器/容器,请查看 Eclipse Jetty Plugin - 看起来正是您需要的,而且 Jetty 快速

【讨论】:

  • 当我不久前看到这个问题时,我正要建议 OP 出于完全相同的原因在 Eclipse RCP 之上构建一些东西,但后来看到了这个小项目并考虑得更好。看起来游戏开发者也有同样的想法:)
  • 我尝试了Maven Jetty插件,速度还不如Play!框架 (ECJ)。我想知道是否有一个 servlet 容器可以与这个 Eclipse Java 编译器一起使用,因为它的速度非常快。
  • 我可以在我现有的 servlet 项目中使用 Eclipse 编译器吗?
【解决方案2】:

JDT——玩!使用 Eclipse JDT 动态编译和加载类。与您在 Eclipse 中编码的方式非常相似,一旦您输入了一些不合需要的内容,您就会看到错误或警告消息。见ApplicationCompiler类。

您可能还想查看JDT

【讨论】:

    【解决方案3】:

    Play 使用 Eclipse 编译器在运行时编译代码。

    看看下面的类,Play 使用它在运行时执行必要的编译。

    https://github.com/playframework/play/blob/master/framework/src/play/classloading/ApplicationCompiler.java

    【讨论】:

      【解决方案4】:

      他们这样做的方式是使用自定义类加载器来检测源文件的更改,使用 Eclipse Java 编译器编译文件,然后在 JVM 中热交换适当的类。如果您正在寻找类似的东西,请查看 ZeroTurnaround 的 JRebel 它不是免费的,但是当您需要重新部署一个大型项目时,节省时间非常值得。

      【讨论】:

        【解决方案5】:

        我不是 Play 开发人员,但 Struts2 也可以做到这一点,但通过 struts2-spring-plugin。由于类重载是由 Spring 提供的,因此任何项目都可以使用这个 spring 特性。

        http://struts.apache.org/2.2.1/docs/spring-plugin.html 在页面中搜索“类重新加载”。

        【讨论】:

        • 不,不是 Struts,Struts 2 (S2)。它们是具有不同代码库的不同产品。 S2 是一个非常流行的现代 (2008) Java MVC 框架。具有与 Wicket 和 Spring MVC 相当的功能集。
        猜你喜欢
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-09
        • 2010-10-21
        • 2011-01-02
        • 2018-08-16
        • 2018-01-30
        相关资源
        最近更新 更多