かとじゅんの技術日誌

技術の話をするところ

[Scala][Wicket] ScalaでWicketを始める

Scalaで使えるウェブフレームワークはLiftやplay frameworkなどのJavaのものを含めれば、使えそうなものは山ほどありそうですが、今回はWicketをやってみようと思います。

とりあえず、Maven2archetypeである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/javaJavaクラスはそのままでも動くので変更しません)

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クラスを実行すれば普通にデバッグも可能です。
意外に簡単でしたネ!