Gantで覚えたことを淡々と記録するよ

もうAnt要らない。
#トカナントカ言ってみるテスト。:-P


とりあえず,あそびでいじってみたスクリプトを晒しとく。

Ant.property (file : 'build.properties' )   // target外ではAnt.xxxが必須
foo = 'gehoge'
def test = 'GEHOGE'                         // defは無くても平気
bar = "${test}/${foo}/hoge"                 // GStringsが使える

includeTargets << gant.targets.Clean        // 出来合のtargetを取り込める
                                            // → antやantCall相当のことはどうすんだろ?

// targetちゅうのは,一種のクロージャなのですな(よー知らんけど)。
target(default: 'これがdefault') {
  property (file : 'build.properties' )    // Ant.は省略できる

  boo = "hogehoge"                         // defも省略できた(あれ?)

  println "${foo} is ${test} or ${boo}"    // GStringsが使える
  println bar
  println Ant.project.properties.foo       // Ant.properties()で読み込んだ値は,
  println Ant.project.properties.test      //  Ant.project.properties.xxx にセットされる

  // 同一スクリプト内でなら,こんな感じでantCall相当のことはできる
  ifthen()
  macrotest()
}


target(ifthen: '条件分岐も簡単') {
  sampleDir = './sample'
  if (new File(sampleDir).exists()) {     // existsの()を省略しちゃダメ
    delete(dir: sampleDir)                // → 省略するとプロパティと勘違いされる
  }

  tempDir = './temp'
  copy(todir: tempDir) {
    fileset(dir: './src')
    targetDir = './target'                // タスク内でもgroovy構文は有効
    if (new File(targetDir).exists()) {
      fileset(dir: targetDir)
    }
  }
}


target(macrotest: 'マクロのテスト') {
  10.times {
    mymacro it
    myClosureMacro it
  }
}

// マクロ(macrodef)相当の事は,メソッドか...
def mymacro(value) {
  println "今の値は${value}です"
}
// クロージャでも実装できるみたい。
myClosureMacro = { it ->
  println "今の値は${it}さ"
}


// ツールちゅうか独自タスク?の組み込みもできるっぽい。
includeTool << gant.tools.Execute

target(exec: '外部コマンドの実行') {
//  Execute.executable 'cmd /c dir'       // → Executeは,うまく出来なかった
  "cmd /c mkdir aaa".execute()            // Groovyだけでも,こんな事できるらしい
  "cmd /c dir".execute().in.eachLine {    // 標準出力をゲットだ!!
    println it
  }
}

上記以外のメモ

参考にしたサイト