Handy Gradle startup script

http://glaforge.appspot.com/article/handy-gradle-startup-script


G* Advent Calendar 2011の7日目です。まさかJenkinsと同じ日になっていたとは、そこまで考えが回らなかった。IntelliJのGradleサポートの話でも書こうかと思ったけど、挙動がイマイチだったのでやめた。リアルタイムだとついさっき、IDEA11が正式リリースしたんですけどね、さすがにホット過ぎて何も書けません。><


代わりにこんなエントリ見つけたので紹介してお茶を濁す。:-)


要するに「Gradleの初期ディレクトリを作るタスクを考えた」って話で、確かにその発想はなかった。

apply plugin : 'groovy'
apply plugin : 'idea'

repositories { mavenCentral() }

dependencies {
  groovy 'org.codehaus.groovy:groovy-all:1.8.4'
}

task makeDirs(description : 'make all dirs for project setup') << {
  def sources = [sourceSets.main, sourceSets.test]
  sources*.allSource*.srcDirs.flatten().each { File srcDir ->
    println "making $srcDir"
    srcDir.mkdirs()
  } 
}

task wrap(type : Wrapper, description : "create a gradlew") {
    gradleVersion = '1.0-milestone-6'	
}


余計な事も書いてあるけどキモはmakeDirsタスク。apply pluginに'java'やら'scala'やら追加すると、勝手にそれっぽいディレクトリを作ってくれる。とっても便利。でも

apply plugin: 'war'

の場合、こんなコードにしないとダメだった。これはまあ仕方ないか。

task makeDirs(description : 'make all dirs for project setup') << {
  def sources = [sourceSets.main, sourceSets.test ]
  sources*.allSource*.srcDirs.flatten().each { File srcDir ->
    println "making $srcDir"
    srcDir.mkdirs()
  }
  ["${webAppDirName}/WEB-INF"].each {
    println "making $it"
    new File(it).mkdir()
  }
}

WEB-INF付けるかどうかは好みの問題。${webAppDirName}を2回書くのイヤでああしたけど、もっとエレガントな書き方あったかも。