【问题标题】:Play framework. no need to compile播放框架。无需编译
【发布时间】:2012-07-28 21:55:03
【问题描述】:

我被介绍到 Play 框架,我发现其中一件令人惊奇的事情是不需要编译项目。您只需要保存编辑的文件并重新加载网页。

有人告诉我,Java 源代码被编译成字节码,然后用 JIT 编译器编译,那么 Play 框架内部有什么魔力?

【问题讨论】:

    标签: java web-applications compilation playframework jit


    【解决方案1】:

    在 DEV 模式下运行时,Play 会检查 java 文件的最后修改日期,并将它们与运行时生成的 .class 文件交叉引用。如果它发现某些东西发生了变化,那么它会在运行时重新编译它们。

    在 Play 1.x 中 - 使用 eclipse jdt 编译器 (org.eclipse.jdt.internal.compiler.Compiler) 完成重新编译。如果您想查看 Play 1.x 中的代码,只需查看以下类 - https://github.com/playframework/play/blob/master/framework/src/play/classloading/ApplicationCompiler.java

    在 Play 2.x 中,Play 似乎是通过与 SBT 工具链接来实现的。看看这个 - https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/core/system/ApplicationProvider.scala

    【讨论】:

      【解决方案2】:

      尽管您没有用最简单的话提到哪个版本的 Play 让您如此惊讶,但可以这样描述:Play in development mode 会监视属于您的应用程序的所有文件,如果有任何更改,它需要重新编译部分。因此 DEV 不应该用于生产 - 因为它是性能的冗余损失。否则:当您在生产模式下启动应用程序时,它将避免立即重新编译,但会获得性能。

      在 Play 2 中运行应用程序是开发模式完成的

      play run
      

      play ~run
      

      (第一个命令在下一页命中后重新编译代码,第二个在下一次文件更改后)

      可以在生产模式下运行应用程序

      play start
      

      【讨论】:

        【解决方案3】:

        如果您谈论的是 Play 框架 1.x,它有一个应用程序类管理器,它会自动加载 java 源文件并将其编译成字节码(使用 Eclipse Java 编译器),此外它还会使用以下增强编译后的代码Javassist。检查https://github.com/playframework/play/tree/master/framework/src/play/classloading中的代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-14
          • 1970-01-01
          • 1970-01-01
          • 2017-08-22
          • 1970-01-01
          • 2023-03-06
          • 2021-12-27
          • 1970-01-01
          相关资源
          最近更新 更多