ScalaでWeb開発 (3) Liftのホットデプロイ
今回も、assemblaの公式wikiを参考に作業 http://www.assembla.com/wiki/show/liftweb/Using_Maven
1. 普通のやり方
まずは、jettyを起動して
1 | mvn jetty:run |
もう一個ターミナル開いて、continuous compileを起動。
1 | $ mvn scala:cc |
これで、もう一個ターミナル開いて、scalaのコードをちょっぴり変更。 ファイルをセーブすると・・・
1 | [INFO] Compiling 2 source files to /sample_maven/lift_blank/target/classes at 120834648 |
コンパイルは自動で走る。jetty側はscanIntervalSecondsで設定した間隔で更新がかかる。 jetty側のログはこんな感じ
1 | [INFO] restarting org.mortbay.jetty.plugin.Jetty6PluginWebAppContext@1424b{/,/sample_maven/lift_blank/src/main/webapp} |
微妙にエラー出てるな・・・。Σ(゜д゜) !? とりあえず、画面は更新が反映されていたのでOK なんか、お手軽だけどscanIntervalSecondsを待たなきゃいけないのが微妙。
2. JRebelを使ったホットデプロイ
こちらも公式サイトのノウハウをなぞーる。 Zero TurnaroundlからJRebelのライセンスをゲット。(Scala開発者ライセンスはフリー) ※右側のGet JRebel For Freeってやつね。 必要事項を3つほど入力すると、あっけなくライセンスファイルがメールが送られてくる。 次に、公式サイトで必要事項を記入して、フリー版をzipアーカイブでダウンロード。 解凍して、適当な場所に配置。jrebel.jarと同じディレクトリにメールで送られてきた開発者用ライセンスを置いたら、準備完了。 あとは、mvn起動時のオプションを設定して、jrebelを読み込んでやればいい。
1 | export MAVEN_OPTS="-noverify -javaagent:/xxxxxxx/jrebel/jrebel.jar" |
jrebelは、コンパイルを検知してjetty側の再読み込みをさせる。 なので、やっぱり別ターミナルで下のコマンドを実行しておく。
1 | mvn scala:cc |
Liftのソースを適当にいじったら、まずscala:ccでコンパイルがかかって、次にJRebelで再読み込みが行われて、 無事に更新が反映された。 scanIntervalSecondsを短くしておけば、JRebelいらなくね?という気もしないでもないが・・・。 何かしらJRebelには良いことがあるのだろうきっと。もう少し調べてみよう。 いずれにしろ、liftのホットデプロイという当初の目的は達成。
2010/12/7 追記
jrebelを使う場合は、pom.xml内のscanIntervalSecondsを0にセットして無効化。
1 | org.mortbay.jetty |