目次

Version 26, last updated by Indrajit Raychaudhuri at Nov 28 01:17 UTC

Lift 自体はデフォルトのビルドシステムとして Maven を使っています。Maven はたとえてみれば芽キャベツのようなもので、好き嫌いが大きく分かれる傾向がありますが、モジュールがたくさんあり、ほかのライブラリへの依存関係も多い Lift のような大規模プロジェクトにとって、Maven による依存関係の管理が非常に便利なことは間違いありません。現在 Lift は Maven 2.2.1 でビルドされていますが、これまでに把握しているかぎりでは、Maven 3 も問題なく使用できるはずです。

すでに Maven がインストールされているかどうかわからないときは、コンソールを開いて次のコマンドを入力してください。

mvn --version

Maven がインストールされていれば、Maven のバージョンなどの情報が表示されます。Maven がインストールされていなかったり、適切なバージョンではない場合には、Maven をインストールしてください。具体的には、オペレーティングシステムに APT のようなツールがある場合にはそれを利用し、ない場合には Maven の Web サイトにアクセスして必要なファイルをダウンロードしてください。

Maven の優れた機能のひとつに、archetype があります。archetype はあらかじめ定義されたプロジェクトテンプレートで、簡単なコマンドでプロジェクトを「生成」することができます。Lift では、archetype として blank、basic、および JPA を使うものが用意されおり、これらを使うことで Lift プロジェクトをすばやく作成することができます。自分のニーズに応じて適切な archetype を選択してください。

  • lift-archetype-blank
  • lift-archetype-basic
  • lift-archetype-jpa-basic

最初の Lift プロジェクトの作成

コンソールを開いて適当なディレクトリに移動し、次のコマンドを入力します。ここで、your.groupIdyour.artifactId は適切な値に置き換えてください。スナップショットバージョンの代わりにマイルストーンリリースを使う場合は、archetypeVersion2.2-M1 などの適切なバージョンに置き換え、remoteRepositories には http://scala-tools.org/repo-releases を指定してください。

Scala 2.7.7 と Lift 2.2 snapshot を使う場合

Unix シェルで次のコマンドを実行します。

mvn archetype:generate \
  -DarchetypeGroupId=net.liftweb \
  -DarchetypeArtifactId=lift-archetype-basic_2.7.7 \
  -DarchetypeVersion=2.2-SNAPSHOT \
  -DarchetypeRepository=http://scala-tools.org/repo-snapshots \
  -DremoteRepositories=http://scala-tools.org/repo-snapshots \
  -DgroupId=your.groupId \
  -DartifactId=your.artifactId

(Windows 上で複数の行にまたがるコマンドを入力するには、上のバックスラッシュ (\) をキャレット (^) で置き換えます。
2009/04/24 以降は、remoteRepositories の代わりに archetypeRepository が使われるようになっているので、トラブルを避けるためには両方指定しておくとよいでしょう。)

Scala 2.8.0 と Lift 2.1 final を使う場合

mvn archetype:generate \
 -DarchetypeGroupId=net.liftweb \
 -DarchetypeArtifactId=lift-archetype-basic_2.8.0 \
 -DarchetypeVersion=2.1 \
 -DarchetypeRepository=http://scala-tools.org/repo-releases \
 -DremoteRepositories=http://scala-tools.org/repo-releases \
 -DgroupId=com.company \
 -DartifactId=lift_test \
 -Dversion=1.0

Windows 上で複数の行にまたがるコマンドを入力するには、上のバックスラッシュ (\) をキャレット (^) で置き換えます。

最後の 3 つの引数は、新しく作成するアプリケーションに関係した値で、それぞれパッケージ (com.company)、名前 (lift_test)、バージョン (1.0) を表します。値は必要に応じて変更してください。

final と snapshot リリースについては、以下のディスカッションを参照してください。

SNAPSHOT が使われた場合、Maven はこの archetype リポジトリからローカルフォルダ (lift_test) を作成します。

POM.XML

<dependency>
 <groupId>net.liftweb</groupId>
 <artifactId>lift-mapper_${scala.version}</artifactId>
 <version>2.2-SNAPSHOT</version>
</dependency>

${scala.version} が 2.7.7 または 2.8.0 の場合

詳細については、Lift に関するディスカッションを参照してください。

ディレクトリ構造

mvn コマンドで新しいプロジェクトを作成すると、典型的な Maven Web アプリケーションプロジェクトのレイアウトを持った新しいディレクトリ your.groupId が作成されます。Maven の設定アプローチの決まりについてよく知らないときは、Maven の Web サイトで詳しい情報を参照してください。

次のスクリーンショットは、重要なディレクトリとファイルだけを抜き出して示したものです。図を見るとわかるように、“blank” archetype には、適切に設定された web.xml と、HelloWorld.scala スニペットにバインドされた index.html テンプレートがすでに用意されています。

Web サーバーの起動

プロジェクトを実行するには、次のコマンドを入力します。

mvn jetty:run

プロジェクト用に適切に設定された Jetty Servlet コンテナが起動します。http://localhost:8080 にアクセスすると、作成した新しい Lift ベースのアプリケーションが動作しているのを確認できます。

さあ、これで最初の Lift プロジェクトを作成することができました。さらに詳しいことについては、「ユーザーガイド」を参照してください。

自動再コンパイルの有効化 (省略可能)

Scala コードを変更した場合は、コードをコンパイルしないと、結果が Web サイトに反映されません。別の端末で次のコマンドを入力すると、コンパイラを連続 (continuous) モードで実行できます。連続モードでは、ファイルシステムが監視され、前回のコンパイル以降に変更されたすべての .scala ファイルが再コンパイルされます。

mvn scala:cc

コンパイルが終わると、更新されたクラスを jetty が認識し、jetty が再起動します。jetty を実行している端末には、次のようなメッセージが表示されるはずです。これは、新しいバージョンのクラスを使って jetty が再起動したことを示しています。

[INFO] Restart completed at ...

JRebel の有効化 (省略可能)

JRebel (以前の名称は JavaRebel) は、Java クラスファイルに対する変更をオンザフライでロリード可能にする Java 仮想マシン用プラグインです。

ZeroTurnaround 社では Scala 開発者向けに無料の JRebel ライセンスを提供しています。ライセンスは同社のサイトで入手できます。

JRebel をダウンロードしてインストールします。

自分のビルドに JRebel を組み込むには、まず、scanIntervalSeconds の値に 0 を設定して、jetty の自動リロードを無効にします。

      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.25</version>
        <configuration>
          <contextPath>/</contextPath>
          <scanIntervalSeconds>0</scanIntervalSeconds>
        </configuration>
      </plugin>

次に MAVEN_OPTS 環境変数に次の内容を追加します。

-noverify -javaagent:/path/to/jrebel/jrebel.jar

jetty を起動すると、次のような JRebel のバナーが表示されるはずです。

 JRebel 3.1 (201006011508)
 (c) Copyright ZeroTurnaround OU, Estonia, Tartu.

Scala オブジェクトが (手動または mvn scala:cc によって) コンパイルされ、該当するクラスがアクセスされると (一般には Web ページを再読み込みした場合)、JRebel は新しいバージョンのクラスをロードして実行します。このとき、JRebel 次のようなメッセージが表示されます。

JRebel: Reloading class 'bootstrap.liftweb.Boot'.