sbt-scalaxb 1.4.x
ここでは 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 += Resolver.sonatypeRepo("public")
step 2. build.sbt
build.sbt
の先頭に以下を書く:
import ScalaxbKeys._ lazy val commonSettings = Seq( organization := "com.example", scalaVersion := "2.11.5" ) lazy val scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.0.2" lazy val scalaParser = "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.1" lazy val dispatchV = "0.11.2" lazy val dispatch = "net.databinder.dispatch" %% "dispatch-core" % dispatchV lazy val root = (project in file(".")). settings(commonSettings: _*). settings( name := "foo-project", libraryDependencies ++= Seq(dispatch), libraryDependencies ++= { if (scalaVersion.value startsWith "2.11") Seq(scalaXml, scalaParser) else Seq() }). settings(scalaxbSettings: _*). settings( sourceGenerators in Compile += (scalaxb in Compile).taskValue, dispatchVersion in (Compile, scalaxb) := dispatchV, async in (Compile, scalaxb) := true, packageName in (Compile, scalaxb) := "generated" // packageNames in (Compile, scalaxb) := Map(uri("http://schemas.microsoft.com/2003/10/Serialization/") -> "microsoft.serialization"), // logLevel in (Compile, scalaxb) := Level.Debug )
これで scalaxb
タスクが読み込まれる。デフォルトの設定値である scalaxbSettings
は、scalaxb
タスクをCompile
コンフィギュレーションにスコーピングし、src/main/xsd
内の全ての xsd ファイル及び src/main/wsdl
内の全ての wsdl ファイルをコンパイルする。
また、sourceGenerators
に scalaxb
が追加されたことで、compile
を呼び出すと自動的にコードが生成されるようになった。
step 3. ディレクトリ構造
src/main/xsd
と src/main/wsdl
ディレクトリを作ってスキーマドキュメントを入れる。
step 4. (省略可) 基本設定
scalaxb
タスクがコードの生成に関する設定は scalaxb
タスクと Compile
コンフィギュレーションにスコーピングされた設定値を再配線することでカスタマイズできる:
packageName in (Compile, scalaxb) := "generated"
再配線可能な設定値を以下に列挙する:
sourceManaged sources xsdSource wsdlSource
packageName packageNames attributePrefix classPrefix paramPrefix
wrapContents chunkSize packageDir generateRuntime laxAny
protocolFileName protocolPackageName scalaxbConfig logLevel