gws 20120521 gradle
Post on 26-May-2015
2.053 Views
Preview:
TRANSCRIPT
2012.05.21
須江信洋(@nobusue)
http://www.jggug.org/
次世代ビルドツールGradle
最新情報アップデート
自己紹介
須江 信洋(すえ のぶひろ) Twitter: @nobusue
http://www.facebook.com/profile.php?id=732337788
かれこれ10年位、JavaEE関連の仕事をしてます
G*(Groovy関連技術)との関わり
Groovyコミュニティ(JGGUG)サポートスタッフ
「プログラミングGROOVY」執筆チーム
「Groovy イン・アクション」翻訳チーム
Groovyで作ったBot飼ってます(@hatena_groovy)
2
ビルドの悩み
Java(特にJava EE)のビルドプロセスは複雑 src -> compile -> test -> package ・・・
依存ライブラリの管理
環境の差異への対応
Windows / MacOS / Linux / Unix
IDE / CI / Test / Staging / Production
Java以外のJVM言語への対応
これに応えるべく、ビルドツールが進化
3
ビルドツールの進化
4
パラダイム
ビルド定義
スクリプト
XML
手続き的 規約によるビルド
Make
Ant Maven
Gradle
Ant/Mavenの課題を解決する次世代ビルドツール AntとMavenの「いいとこどり」
HibernateやSpringSourceで使われている
標準化と柔軟性の両立 Mavenライクな標準ディレクトリ構造を使い、そこから外れる部分は自由にカスタマイズ可能
依存ライブラリはMavenリポジトリでもローカルJARでも好きなように定義できる
マルチプロジェクトへの対応
ビルドスクリプトはGroovyで記述 DSLによるシンプルかつ可読性の高いビルド定義
条件分岐や繰り返しなど、任意の処理をGroovyで
5
http://gradle.org/
2012/5/21現在
1.0-rc-3が最新
要するにGradleとは?
6
Mavenのように 規約によるビルドで効率的に記述でき、
Antのように
プロジェクト特有の事情に柔軟に対応でき、
Makeのように スクリプトのパワーを活かしたビルドが実現できる
クロスプラットフォーム対応次世代ビルドツール
Gradleのビルドスクリプト(例)
7
apply plugin: 'java' repositories { mavenCentral() } dependencies { compile( group: 'commons-collections', name: 'commons-collections', version: '3.2') testCompile( group: 'junit', name: 'junit', version: '4.+') }
Javaプラグインを適用
依存性解決にMavenリポジトリを利用
プロダクトコードのコンパイル時の依存先
テストコードのコンパイル時の依存先
OK、「gradle test」を実行だ!
8
Mavenと同様の規約に従って プロダクトコードとテストコードを
配置
Demo
9
Gradle DSL
素朴な疑問 build.gradleに書いてある”apply”とか”repositories”とか”dependencies”とか何?
なんかGroovyスクリプトと違くね?
お答え applyもrepositoriesもdependenciesも実はメソッドです(引数のカッコを省略してるだけ)
Gradleの文法はGroovyの内部DSLとして定義
詳しいことは・・・・ http://monochromeroad.com/artifacts/gradl
e/userguide/writing_build_scripts.html#N11360
10
条件分岐も簡単
11
task "OsDependTask" << { def os = System.getProperty("os.name") if(os.contains("Windows")) { println "Windows用の処理" } else if(os.contains("Mac OS")) { println "Mac OS用の処理" } else { println "Linux/Unix用の処理" } }
動的タスク定義も簡単
12
4.times { counter -> task "task${counter}" << { println "${counter+1}番目の動的タスクです" } }
Demo
13
AntからGradleへ Gradleは既存のAnt資産を活用できる Antのbuild.xmlをそのまま読み込んで実行可能 Antターゲット=Gradleタスク
AntタスクをGradleから直接利用可能 GroovyのAntBuilderが組み込まれている
AntタスクとGradleタスクを共存することも可能 相互に依存するタスクも定義できる AntタスクをGradleから拡張することもできる
Gradleは「Better Ant」としても使える Mavenとの大きな違い Antから段階的にGradleへ移行できる
14
GradleでAntのビルド定義を利用
15
ant.importBuild 'build.xml'
<project> <target name="hello"> <echo>Antターゲットの実行</echo> </target> </project>
[build.gradle]
[build.xml]
GradleでAntタスクを利用
16
task hello << { ant.echo('Antタスクの実行') }
Demo
17
Jenkinsとの統合 - Gradle
Gradle wrapperを利用 JDKさえ導入されていれば、Gradleを自動でインストールして実行してくれる
Jenkins上では汎用コマンドとして実行すればよい
Gradle wrapperは、CI用途に限らず、 開発者の環境構築負荷軽減にも有用
18
Gradle wrapper
19
task wrapper(type: Wrapper) { gradleVersion = '1.0-milestone-9' }
[build.gradle]
Gradle導入済の環境で"gradle wrapper"を実行 すると、Gradleのブートストラップ(gradlew)が生成される
バージョン管理 システム
Jenkinsのビルド設定
20
Jenkinsとの統合 - Spock
Spock
レポートはJUnit互換なので、Jenkinsでそのまま利用可能
21
Jenkinsのテストレポート設定
JUnitと同様
22
Demo
23
@nobusueの持論
粗探し(?) される頃から 一人前
Gradleの粗探し プラグインがまだまだ少ない
日本語の情報が少ない
プロジェクトディレクトリの自動生成機能がない
などなど・・・
24
Gradleプラグイン、順調に増殖中
http://wiki.gradle.org/display/GRADLE/Plugins
25
Gradleを使い始める第一歩
"Gradle User Guide"がおすすめ http://gradle.org/docs/current/userguide/
userguide.html
[翻訳版] http://monochromeroad.com/artifacts/gradle/userguide/userguide.html
翻訳プロジェクト(@literaliceさん)
https://github.com/literalice/gradle-ja
26
Jenkins+Gradle
@bluepapa32さんBlog:「Jenkins CI 上で Gradle を利用する最も簡単な方法」 http://d.hatena.ne.jp/bluepapa32/201103
17/1300376998
27
時代はGradleだがや
ありがとうございました
28
http://www.facebook.com/orehiji
top related