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 } }
上記以外のメモ
- スクリプト中に日本語使うなら,ビルドスクリプトは'utf-8'にしとく
- デフォルトのビルドスクリプト名は'build.gant'(-fオプションで指定可)
- 元はGroovyスクリプトなワケだから,行コメントやブロックコメントが使える(便利!!)
参考にしたサイト
- Groovy - Java用スクリプト言語
- とりあえず,Groovyの文法はここで覚えた(日本語だったら,ここが一番便利)。
- Groovyの実験 - nidoの雑記
- GStringのexecute()メソッドはここで知りますた。