2014-09-13
Gradle(2.1)とScala(2.11.2)と
以前、Gradleを使ってScalaプロジェクトを試したことがありましたが、fscがうまく動かなかったりして、なんだかんだで重いなーということで使っていませんでした。
が、このことをTwitterでツイートしていたら、今使っているという方にツッコミをいただいたので、久しぶりに試してみることにしました。
こちらを見ながら。
Chapter 25. The Scala Plugin
http://www.gradle.org/docs/current/userguide/scala_plugin.html
使用するScalaおよびGradleのバージョンの組み合わせは、このエントリを書いている時点の最新版、Scalaが2.11.2、Gradleが2.1となります。
はじめに
手始めに、最小設定はこんな感じですね。
build.gradle
apply plugin: 'scala'
repositories {
mavenCentral()
}
dependencies {
compile 'org.scala-lang:scala-library:2.11.2'
}
これで、スケープゴート的なソースを用意。
src/main/scala/HelloGradle.scala
object HelloGradle { def main(args: Array[String]): Unit = new Greeting().say() }
src/main/scala/Greeting.scala
class Greeting { def say(): Unit = println("Hello Scala!!") }
必要なライブラリのダウンロードは終わっているものとして、とりあえずビルド。
$ gradle build :compileJava UP-TO-DATE :compileScala :processResources UP-TO-DATE :classes :jar :assemble :compileTestJava UP-TO-DATE :compileTestScala UP-TO-DATE :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test UP-TO-DATE :check UP-TO-DATE :build BUILD SUCCESSFUL Total time: 19.398 secs
動きましたね。…ええ、決して速くはありませんが。つか、絶対うちのPC遅い。
Daemonモードにしておくと、少しは改善されますけれど(1度clean実行済み)。
$ gradle --daemon build :compileJava UP-TO-DATE :compileScala :processResources UP-TO-DATE :classes :jar :assemble :compileTestJava UP-TO-DATE :compileTestScala UP-TO-DATE :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test UP-TO-DATE :check UP-TO-DATE :build BUILD SUCCESSFUL Total time: 10.707 secs
何回か動かしてみましたが、所要時間にはだいぶムラがありました。
fscを試す
fscを有効にするには、build.gradleに以下を加えます。
compileScala {
scalaCompileOptions.useCompileDaemon = true
}
とりあえず、1度Daemonを止めて試してみましょう。
$ gradle build :compileJava UP-TO-DATE :compileScala FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileScala'. > Compilation failed because of an internal compiler error; see the error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 14.676 secs
…相変わらず動かないですね、この人。
当然ながら、Daemonモードにしても動きません。
スタックトレースを出してみると、fscがコケているようですがあまり深追いする気にもならず…。
Caused by: : Compilation failed because of an internal compiler error; see the error output for details. at scala.tools.ant.ScalaTask$class.buildError(ScalaMatchingTask.scala:27) at scala.tools.ant.ScalaMatchingTask.buildError(ScalaMatchingTask.scala:30) at scala.tools.ant.FastScalac.execute(FastScalac.scala:150) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
インクリメンタルコンパイル
というわけで、fscはとっとと諦めて、インクリメンタルコンパイルへ。
設定的には、以下になります。
tasks.withType(ScalaCompile) {
scalaCompileOptions.useAnt = false
}
こちらは動作しました。いただいた情報では、Daemonモードではうまく動かないということでしたが、このくらいのソースなら大丈夫だったようで…。
でも、このくらいのソースだと、設定を入れた効果もわかりませんでしたけれど…。
どうなのかなぁ?
あと、普通に実行するくらいはやっておきましょうか。applicationプラグインを当てて
apply plugin: 'scala' apply plugin:'application' mainClassName = 'HelloGradle' repositories { mavenCentral() } dependencies { compile 'org.scala-lang:scala-library:2.11.2' }
実行!
$ gradle --daemon run :compileJava UP-TO-DATE :compileScala :processResources UP-TO-DATE :classes :run Hello Scala!! BUILD SUCCESSFUL Total time: 13.756 secs
動きましたよ、と。
- 50 https://www.google.co.jp/
- 16 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCMQFjAB&url=http://d.hatena.ne.jp/Kazuhira/20110525/1306327272&ei=KjoUVJa-CJKeugT7ioE4&usg=AFQjCNFWm-bNIm907PcgPu3ddgeq7nevqA&bvm=bv.75097201,d.dGc
- 14 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB0QFjAA&url=http://d.hatena.ne.jp/Kazuhira/20130806/1375802797&ei=yUUUVK_6J5He8AWS-4GoAw&usg=AFQjCNHv4Evu37gjxMmKo2TeqCgpcTUxZw&sig2=h9qTAQlfL5SmW3yz-UTuhQ&bvm=bv.75097201,
- 7 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CDgQFjAC&url=http://d.hatena.ne.jp/Kazuhira/20140628/1403959552&ei=CGEUVID3B4_huQS_gYLwAw&usg=AFQjCNGTpCldrOvJBH5jUjk9TTNwhMCOHQ&sig2=G3rBsm7_dyFYUOBfT6dsng&bvm=bv.75097201,
- 5 http://pipes.yahoo.com/pipes/pipe.info?_id=02db597254ec68550537866a2fca2ce6
- 4 http://radi0ant.hatenablog.com/entry/2012/05/04/035243
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CEEQFjAE&url=http://d.hatena.ne.jp/Kazuhira/20131026/1382796711&ei=NAkUVMLjNo3U8gX_mYJI&usg=AFQjCNH4Zin4EPWjd3Acf0lIqpvWuSdLSQ
- 3 http://t.co/HKGfxmRKLI
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CDcQFjAD&url=http://d.hatena.ne.jp/Kazuhira/20120707/1341675144&ei=E0gUVOvfCoq58gXEpoGQCA&usg=AFQjCNEIteBrfSWSr-b-HxPHbPnfEjWnrQ&sig2=y49Z0vUDd2gl1TqoMsAVEQ&bvm=bv.75097201,
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&cad=rja&uact=8&ved=0CEUQFjAF&url=http://d.hatena.ne.jp/Kazuhira/20130512/1368368205&ei=4kIUVM_eBIK1uATntoCwCQ&usg=AFQjCNGcuHsFB5P7rw1uLDOueOTDngtFOA&bvm=bv.75097201,d.dGc