私はPlayフレームワークを紹介されましたが、それについて私が見つけた驚くべきことの1つは、プロジェクトをコンパイルする必要がないことです。編集したファイルを保存してウェブページをリロードするだけです。
JavaソースコードはバイトコードにコンパイルされてからJITコンパイラでコンパイルされると教えられてきましたが、Playフレームワークの魔法は何ですか?
私はPlayフレームワークを紹介されましたが、それについて私が見つけた驚くべきことの1つは、プロジェクトをコンパイルする必要がないことです。編集したファイルを保存してウェブページをリロードするだけです。
JavaソースコードはバイトコードにコンパイルされてからJITコンパイラでコンパイルされると教えられてきましたが、Playフレームワークの魔法は何ですか?
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
Playのどのバージョンがあなたをそれほど驚かせたかについては、最も簡単な言葉で言及していませんが、そのように説明できdevelopment mode
ます。Playinは、アプリに属するすべてのファイルを監視し、変更があった場合は、必要な部分を再コンパイルします。したがって、DEVはパフォーマンスの冗長な損失であるため、本番環境には使用しないでください。それ以外の場合:アプリケーションを本番モードで起動すると、すぐに再コンパイルされることはありませんが、パフォーマンスは向上します。
Play 2で実行しているアプリケーションは、開発モードで実行されます。
play run
また
play ~run
(最初のコマンドは次のページヒット後にコードを再コンパイルし、2番目は次のファイル変更後に再コンパイルします)
本番モードでのアプリケーションの実行は、
play start
Play Framework 1.xについて話している場合、Javaソースファイルを自動的にロードしてバイトコードにコンパイルする(Eclipse Javaコンパイラを使用)アプリケーションクラスマネージャーがあり、さらにJavassistを使用してコンパイルされたコードを拡張します。https://github.com/playframework/play/tree/master/framework/src/play/classloadingのコードを確認してください。