Ant, Maven, Gradleのビルド #kyon_mmAdvent
kyon_mm Advent Calendar
つぎのリンクにあるAdventCalendarの五日目です。
http://connpass.com/event/1457/
Ant, Maven, Gradleの特徴
これらはビルドツールと呼ばれるものであり、端的に言えば、コンパイル、テストなどを行います。
ライブラリを自動的にダウンロードしてきたり、OSSとして簡単に公開することを提供しているものもあります。
これらの「コンパイル」「テスト」「静的解析チェック」などのビルドツールが行う作業をタスクとして登録して、実行するツールと言えばよいのですかね。
簡単に比較してみましょう。
項目 | Ant | Maven | Gradle |
---|---|---|---|
記述言語 | XML | XML | Groovyの内部DSL |
柔軟性 | 柔軟 | 硬い | 柔軟 |
使われる事が多いリポジトリ | Ivy | MavenCentral | MavenCentral |
筆者の感覚 | ありえない | 滅びろ | 最高 |
結論から言うと、僕はGradle以外は使いたくありません。はい。公式ドキュメントが有志によって日本語訳されているのも素晴らしいです。
では、軽くGradleの説明をしたあとに、AntからGradleへの移行方法、MavenからGradleへの移行方法をサクッと説明します。
GradleでGroovyアプリをビルドする
細かい事はDocumentを読んでもらうとして、次のコードで必要な依存ライブラリのダウンロード、コンパイル、テスト、jar作成までをこなします。
プロジェクトのルートディレクトリにbuild.gradleというファイル名で作成し、コンソールからgradleと打てば実行されます。
みよ!この簡潔さ!
apply plugin: 'groovy' defaultTasks 'check', 'jar' repositories { mavenCentral() maven{ url "https://oss.sonatype.org/content/repositories/snapshots" } } dependencies{ groovy 'org.codehaus.groovy:groovy:2.0.5' testCompile 'org.spockframework:spock-core:0.7-groovy-2.0-SNAPSHOT' testCompile 'junit:junit:4.10' }
ここでは既存のタスクである、compile, testCompileなどを使用しているので、タスクの定義がありません。
ここでhello worldと表示するだけのタスクを追加しようとしたときは次のように書きます。
task hello << { println "Hello World" }
提供されているプラグインは基本的にapply plugin : 'groovy'などと書くわけですが、
「ちょっと複雑な処理なんだけど、他のプラジェクトでも使いたいからbuild.gradleには書きたくない」というときも自分でkyonOriginal.gradleファイルなどとしてbuild.gradleと同じディレクトリに置き、Gradleのタスク形式で書き、それをbuild.gradleでapply from:kyonOriginal.gradleとすることで、kyonOriginal.gradleで定義したタスクを使えます。
Groovyの内部DSLなので、「普通のプログラミング言語で書ければ簡単に定義できそうな処理」というのが素直にGroovyとして書けます。非常に便利です。
AntからGradleへの移行
Ant使っているプロジェクトの方、安心してください。
GradleはAntのbuild.xmlをインポートしてそのままGradleでbuild.xmlのタスクを実行できます。
build.gradleに次の行を上の方に追加すれば、他のタスクと同じように使えます。
ant.importBuild 'build.xml'
MavenからGradleへの移行
大きいものになるとそんなに簡単じゃないけど、十分にメリットはありますよと多くの人が言っているのでその通りなのだろうなぁと思っています。
ちなみにSpringはMavenからGradleへ乗り換え、Grailsも次期メジャーバージョンではGradleになる予定です。
Mavenプラグインはあるのですが、そこまで再現できていないという実情があります。
僕が移行した経験のなかではだいたいGroovyで自分でプラグインを書きました。結構簡単に書けたのでGroovy自体がこういったツールに向いている言語であるなぁと実感した場面でした。
参考Webサイト
IT検証ラボ - ビルドツールの移行性、MavenからGradleへの乗り換えは容易か:ITpro
SpringがGradleへ移行しOSGiを放棄