sbt-scalaxb

ここでは sbt のプロジェクトに scalaxb タスクを追加する方法を説明する。(sbt-scalaxb for sbt 0.7 に関しては別ページに移動した。)

g8 を使った自動化

このページで説明される手順は、eed3si9n/scalaxb.g8 という名前の giter8 テンプレートにスクリプト化してある。簡単にプロジェクトを始めてみたい場合は giter8 をインストールして以下を走らせる:

$ g8 eed3si9n/scalaxb

プロジェクト名を入力すると、sbt-scalaxb が予めインストールされたほぼ空っぽの sbt プロジェクトがセットアップされる。scalaxb を始めるのに便利な方法だ。

既にプロジェクトがある場合は、続きを読んでほしい。

build.sbt を使う

step 1. plugins.sbt

まず、project/plugins.sbt に以下を追加する:

addSbtPlugin("org.scalaxb" % "sbt-scalaxb" % "X.X")
 
resolvers += "sonatype-public" at "https://oss.sonatype.org/​content/repositories/public"

step 2. build.sbt

build.sbt の先頭に以下を書く:

import ScalaxbKeys._
 
// other settings
 
scalaxbSettings
 
sourceGenerators in Compile <+= scalaxb in Compile

空行で分けられていることに注意。これで scalaxb タスクが読み込まれる。デフォルトの設定値である scalaxbSettings は、scalaxb タスクをCompile コンフィギュレーションにスコーピングし、src/main/xsd 内の全ての xsd ファイル及び src/main/wsdl 内の全ての wsdl ファイルをコンパイルする。

また、sourceGeneratorsscalaxb が追加されたことで、compile を呼び出すと自動的にコードが生成されるようになった。

step 3. ディレクトリ構造

src/main/xsdsrc/main/wsdl ディレクトリを作ってスキーマドキュメントを入れる。

step 4. (省略可) 基本設定

scalaxb タスクがコードの生成に関する設定は scalaxb タスクと Compile コンフィギュレーションにスコーピングされた設定値を再配線することでカスタマイズできる:

packageName in scalaxb in Compile := "packagename"

再配線可能な設定値を以下に列挙する:

sourceManaged  sources         xsdSource         wsdlSource
packageName    packageNames    attributePrefix   classPrefix         paramPrefix
wrapContents   chunkSize       packageDir        generateRuntime     laxAny
protocolFileName protocolPackageName scalaxbConfig logLevel

build.scala を使う

import sbt._
 
object Builds extends Build {
  import Keys._
  import sbtscalaxb.Plugin._
  import ScalaxbKeys._
 
  lazy val buildSettings = Defaults.defaultSettings ++ Seq(
      scalaVersion := "2.9.2"
    )
  lazy val library = Project("library", file("library"), settings = buildSettings ++
        scalaxbSettings) settings(
      sourceGenerators in Compile <+= scalaxb in Compile
    )
}