sbt-scalaxb 登場
sbt のための scalaxb プラグインを書いてもらい、さらに快くそれをプロジェクトに取り込まさせてくれた Max 氏 (@max4f) に謝意を表したい。ところで、皆さんは sbt 使ってますね?
sbt から compile-xsd
タスクを使うための手順を説明する。
step 1. Plugins.scala
以下を project/plugins/Plugins.scala
に追加する。
import sbt._ class Plugins(info: ProjectInfo) extends PluginDefinition(info) { val scalaxb = "org.scalaxb" % "sbt-scalaxb" % "0.6.0" val scalaToolsNexusSnapshots = "Scala Tools Nexus Snapshots" at "http://nexus.scala-tools.org/content/repositories/snapshots/" val scalaToolsNexusReleases = "Scala Tools Nexus Releases" at "http://nexus.scala-tools.org/content/repositories/releases/" }
step 2. Project.scala
Project.scala
に scalaxb.ScalaxbPlugin
trait をミックスインする。
import sbt._ class SampleAppProject(info: ProjectInfo) extends DefaultProject(info) with scalaxb.ScalaxbPlugin { }
sbt から reload
を実行して、変更を有効化する。
step 3. (省略可) override defs
scalaxb.ScalaxbPlugin
は project/plugins/src_managed/sbt-scalaxb-x.x.x
以下のコードにて定義されており、以下のメソッドを定義する。
def generatedPackageName: String = "generated" def generatedPackageNames: Map[URI, String] = Map() def generatedClassPrefix: Option[String] = None def generatedParamPrefix: Option[String] = None def generatePackageDir: Boolean = true def generateWrapContents: Seq[String] = Nil
Project.scala
にて必要に応じてオーバーライドする。
import sbt._ class SampleAppProject(info: ProjectInfo) extends DefaultProject(info) with scalaxb.ScalaxbPlugin { override def generatedPackageName = "xmlschema" }
step 4. xsd
directory
src/main/xsd/
ディレクトリを作って、そこに xsd ファイルを入れる。
step 5. compile-xsd
sbt にて以下を実行する。
> compile-xsd
src_generated/
ディレクトリ以下に Scala コードが生成され、これはコンパイルに含まれるようになる。