20

GrailsやPlayなどのフレームワークがコードの変更を検出し、アプリサーバーを再起動せずに自動的に再コンパイルをトリガーする方法の詳細を知っている人はいますか?これを簡単に実現できるGroovyのコンパイラまたはその動的な性質に固有の何かがありますか?

背景として、ビルドプロセス中にカスタムコード生成段階があり、同様の編集および更新機能を使用できるようにしたいと考えています。

全体像を把握するためにコードをふるいにかける必要がある場合でも、ポインターを事前に感謝します。

編集:サーブレットコンテナ内のアプリでこれを行うために必要なことを理解するほど、Grailsプラグインを構築するつもりはないことを明確にする必要があります。つまり、Groovyを使用していますが、Grailsは使用していません。

Edit2: Playにはこのホットリロードを可能にする特定のDEVモードがあるようです: http ://www.playframework.org/documentation/1.1.1/main#lifecycle

JRebelがクラスローダーを介して精巧なクラスバージョン管理を実行することは理解していますが、GrailsやPlayなどのWebフレームワークはそれをそのレベルに引き上げていないと思います。

4

1 に答える 1

13

Play は Eclipse JDT を使用して実行時にコードをコンパイルします。

実行時に必要なコンパイルを実行するために Play によって使用される次のクラスを見てください。

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

また、Play での DEV モードと PROD モードの違いに注意してください。これは Play 開発者が行った設計上の決定であり、アプリケーションがプロダクション モードになると、クラスはサーバーの起動時にコンパイルされ、ホット リロードのチェックは行われません。これは理にかなっています。なぜなら、PROD モードでは、コードは実際には変更されないはずだからです。

DEV モードでは、新しいリクエストを受信するたびに Java ファイルの更新がチェックされ、変更されたファイルは自動的に再コンパイルされます (エラーはブラウザーに直接表示されます)。このプロセスは DEV モードでは非常に生産的です。なぜなら、頻繁にコードを変更することになり、即時のフィードバックが非常に強力になるからです。

于 2011-03-08T22:00:18.690 に答える