CLOVER🍀

That was when it all began.

sbt 0.12系でWARファイルを作る時の注意

前のエントリで、「TomcatにWARファイルをデプロイ…」なんてことを書いてましたが、xsbt-web-pluginを使うのにこれまたてこずっていたという…。

う〜ん、久しぶりにこの辺りを触ると、だいたいハマりますね(笑)。

今回使用した、sbtとxsbt-web-pluginのバージョンは

名前 バージョン
sbt 0.12.1
xsbt-web-plugin 0.2.11.1

となります。

で、WARファイルの名前を設定しようと過去の自分のエントリや以下の書籍を見つつ、

Scala逆引きレシピ

Scala逆引きレシピ

こんな感じに設定すると

artifactName in packageWar := {
  (config: String, module: ModuleID, artifact: Artifact) =>
    artifact.name + "." + artifact.extension
}

怒られます…。

/xxxxx/tomcat-stuck-thread/build.sbt:15: error: type mismatch;
 found   : (String, sbt.ModuleID, sbt.Artifact) => java.lang.String
 required: (sbt.ScalaVersion, sbt.ModuleID, sbt.Artifact) => String
  (config: String, moduleID: ModuleID, artifact: Artifact) =>
                                                           ^
[error] Type error in expression

これはまた、バージョンアップで何か変わったな…ってことで軽く調べてみました。で、見つけたのがこちら。
http://eed3si9n.com/ja/sbt-0120-changes

そして、こんな記述が。

artifactName の型が (ScalaVersion, ModuleID, Artifact) => String となった。

まあ、エラーも同じこと言ってますからね…。sbt 0.12で、またいろいろ変わったんですねー。

というわけで、こういう感じに設定してみると

artifactName in packageWar := {
  (scalaVersion: ScalaVersion, module: ModuleID, artifact: Artifact) =>
    artifact.name + "." + artifact.extension
}

うまくWARファイルの名前を変更することができます。

> package-war
[info] Updating {file:/xxxxx/tomcat-stuck-thread/}default-ebd9d4...
[info] Resolving org.mortbay.jetty#servlet-api;2.5-20081211 ...
[info] Done updating.
[info] Compiling 1 Scala source to /xxxxx/tomcat-stuck-thread/target/scala-2.9.2/classes...
[info] Packaging /xxxxx/tomcat-stuck-thread/target/scala-2.9.2/tomcat-stuck-thread.war ...
[info] Done packaging.

この時のbuild.sbtはこちら。

name := "tomcat-stuck-thread"

version := "0.0.1"

scalaVersion := "2.9.2"

seq(webSettings :_*)

libraryDependencies ++= Seq(
  "javax.servlet" % "javax.servlet-api" % "3.0.1" % "provided",
  "org.mortbay.jetty" % "jetty" % "6.1.22" % "container"
)

artifactName in packageWar := {
  (scalaVersion: ScalaVersion, module: ModuleID, artifact: Artifact) =>
    artifact.name + "." + artifact.extension
}

project/plugins.sbtはこちら。

libraryDependencies <+= sbtVersion(v => v match {
  case "0.11.0" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.0-0.2.8"
  case "0.11.1" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.1-0.2.10"
  case "0.11.2" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.2-0.2.11"
  case "0.11.3" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.3-0.2.11.1"
  case x if (x.startsWith("0.12")) => "com.github.siasia" %% "xsbt-web-plugin" % "0.12.0-0.2.11.1"
})