Gradle で Scala プロジェクトをビルドする

ふと思いたって Gradle で Scala プロジェクトをビルドしてみた。

こんな build.gradle を使う。

apply plugin: 'scala'

ext {
  scalaVersion = '2.10'
}

repositories {
  mavenCentral()
  maven {
    url 'http://repo.typesafe.com/typesafe/releases/'
  }
}

dependencies {
  compile 'org.scala-lang:scala-library:2.10.1'
  compile "net.databinder:unfiltered-netty-server_$scalaVersion:0.6.8"
}

tasks.withType(ScalaCompile) {
  scalaCompileOptions.useAnt = false
}

task start(dependsOn: 'compileScala', type: JavaExec) {
  main = 'net.physalis.shirokuma.Server'
  classpath = sourceSets.main.runtimeClasspath
}

sbt が恋しくなる点

  • %% 記法がないので artifact ID に Scala のバージョン番号を含める必要がある (上の例の unfiltered-netty-server のところ)
  • ~compile のように継続コンパイルの機能がない

特に後者はコンパイルの体感速度を改善するのに役立っていたので痛い。 あと、プラグインに依存してたら sbt を使う以外に選択肢がない。

これらを許容できるなら Gradle はなかなか良いかもしれない。 自由にタスクを追加できるし、文法がわかりやすくて気軽に書ける。 型安全ではないけれど、ビルド定義はこれくらい気楽な方が良いと思う。