Scalaで使えるウェブフレームワークはLiftやplay frameworkなどのJavaのものを含めれば、使えそうなものは山ほどありそうですが、今回はWicketをやってみようと思います。
とりあえず、Maven2のarchetypeであるWicketのQuickstartを使ってプロジェクト構成を自動生成します。
http://wicket.apache.org/start/quickstart.html
mvn archetype:create -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=1.4.15 -DgroupId=dmmy -DartifactId=dmmy -DinteractiveMode=false
私はIDEにIntelliJ IDEA 10を使っているので、作成されたプロジェクトをインポートします。File -> Openでpom.xmlを指定してそのまま開くと認識されるはず。(Maven2のパスとかはちゃんと設定されている前提)
そして、Scala化していくために、src/main/scalaを作っておきます。
次にpom.xmlに以下を追加します。
<propperties> <scala.version>2.8.0</scala.version> </properties> <repositories> <repository> <id>scala-tools.org</id> <name>Scala-Tools Maven2 Repository</name> <url>http://scala-tools.org/repo-releases</url> </repository> <repository> <id>maven2-repository.dev.java.net</id> <name>Java.net Repository for Maven</name> <url>http://download.java.net/maven/2/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>scala-tools.org</id> <name>Scala-Tools Maven2 Repository</name> <url>http://scala-tools.org/repo-releases</url> </pluginRepository> </pluginRepositories> <dependencies> // ... <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency> // ... </dependencies> <build> // ... <plugins> // ... <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.12.2</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> // ... </plugins> // ... </build>
pom.xmlを変更したら、pom.xmlを再読込したら、scalaプロジェクトとして認識されるはず。
あとは、src/main/javaにあるHomePageクラスとWebApplicationクラスを以下のようにScalaのコードに書き換えます。書き換えたら、src/main/scalaに移動する。この程度のクラスなら、簡潔にコードが表現されている様子があまりわからないかもしれませんが。
(test/test/javaのJavaクラスはそのままでも動くので変更しません)
package dmmy import org.apache.wicket.markup.html.WebPage import org.apache.wicket.PageParameters import org.apache.wicket.markup.html.basic.Label class HomePage extends WebPage { // ここがコンストラクタブロック add(new Label("message", "If you see this message wicket is properly configured and running")) }
package dmmy import org.apache.wicket.markup.html.WebPage import org.apache.wicket.protocol.http.WebApplication class WicketApplication extends WebApplication { override def getHomePage = classOf[HomePage] // これはHogePage.classと同じ意味 }
mvn packageするとJavaで書いたテストも動作します。src/test/javaのStartクラスを実行すれば普通にデバッグも可能です。
意外に簡単でしたネ!