Gradle で Hello Scala


f:id:Naotsugu:20150530172216p:plain

Scala のビルドツールと言えば sbt ですが、もちろん Gradle でも簡単に始められます。

ここでは Gradle の scala プラグインを使った Hello World を見ていきます。

プロジェクトの作成

gradle の init タスクで scala プロジェクトが作成できます(gradle の init タスクは試験的機能であり将来変更される可能性があります)。

適当なディレクトリを作成し、gradle init タスクを実行します。type には scala-library を指定します。

gradle init --type scala-library

src 内は以下のようになります。

src
├── main
│   └── scala
│       └── Library.scala
└── test
    └── scala
        └── LibrarySuite.scala

scala-library タイプを指定したので、build.gradle は以下の内容で生成されます。

apply plugin: 'scala'

repositories {
    jcenter()
}

dependencies {
    compile 'org.scala-lang:scala-library:2.11.6'

    testCompile 'junit:junit:4.12'
    testCompile 'org.scalatest:scalatest_2.11:2.2.4'
    testRuntime 'org.scala-lang.modules:scala-xml_2.11:1.0.3'
}

scala は 2.11系で、テストライブラリは Scalatest の依存が追加されます。

プラグインには scala プラグインが指定されます。

Scala プラグイン

scala プラグインにより compileScala compileTestScala scaladoc といったタスクが追加されます。

src/main/scala には Scala のコードだけでなく、Java のコードも含めることができます。逆に src/main/java には Scala コードを含めることはできません。


Zinc による差分コンパイルを有効にするには以下を build.gradle に追加します。

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

Zinc はソース解析を行い、build/tmp/scala/compilerAnalysis 以下に解析結果を保存します。小さい変更の度にコンパイルする場合には大幅なコンパイル時間の短縮が可能です。

フルコンパイルを行う場合には Zinc によるコンパイルでなく、通常のコンパイルを行うことが推奨されます。

Main オブジェクト

Hello Scala のための Main オブジェクトを作成します。

touch src/main/scala/Main.scala

ソースには以下を記載します。

object Main {
  def main(args: Array[String]) {
    println("Hello, Scala!")
  }
}

実行

作成した Hello Scala を application プラグインで実行します。build.gradle は以下のようになります。

apply plugin: 'scala'
apply plugin: 'application'

repositories {
    jcenter()
}

dependencies {
    compile 'org.scala-lang:scala-library:2.11.6'

    testCompile 'junit:junit:4.12'
    testCompile 'org.scalatest:scalatest_2.11:2.2.4'
    testRuntime 'org.scala-lang.modules:scala-xml_2.11:1.0.3'
}

mainClassName = 'Main'

application プラグインの run タスクを実行します。

gradlew run

コンソールには以下が出力されます。

Hello, Scala!


次回(Gradle で Hello Scalatra - A Memorandum)は Scalatra で簡単な Hello World サーブレットを作成していきます。