6

私はPlayフレームワークを紹介されましたが、それについて私が見つけた驚くべきことの1つは、プロジェクトをコンパイルする必要がないことです。編集したファイルを保存してウェブページをリロードするだけです。

JavaソースコードはバイトコードにコンパイルされてからJITコンパイラでコンパイルされると教えられてきましたが、Playフレームワークの魔法は何ですか?

4

3 に答える 3

11

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

于 2012-07-29T07:10:05.030 に答える
4

Playのどのバージョンがあなたをそれほど驚かせたかについては、最も簡単な言葉で言及していませんが、そのように説明できdevelopment modeます。Playinは、アプリに属する​​すべてのファイルを監視し、変更があった場合は、必要な部分を再コンパイルします。したがって、DEVはパフォーマンスの冗長な損失であるため、本番環境には使用しないでください。それ以外の場合:アプリケーションを本番モードで起動すると、すぐに再コンパイルされることはありませんが、パフォーマンスは向上します。

Play 2で実行しているアプリケーションは、開発モードで実行されます。

play run

また

play ~run

(最初のコマンドは次のページヒット後にコードを再コンパイルし、2番目は次のファイル変更後に再コンパイルします)

本番モードでのアプリケーションの実行は、

play start
于 2012-07-28T22:12:15.040 に答える
1

Play Framework 1.xについて話している場合、Javaソースファイルを自動的にロードしてバイトコードにコンパイルする(Eclipse Javaコンパイラを使用)アプリケーションクラスマネージャーがあり、さらにJavassistを使用してコンパイルされたコードを拡張します。https://github.com/playframework/play/tree/master/framework/src/play/classloadingのコードを確認してください。

于 2012-07-28T22:09:24.850 に答える