More Related Content
Gws 20130315 gradle_handson The History of Groovy #GroovyBase Read Groovy Compile process(Groovy Benkyoukai 2013) Groovy Shell Scripting 2015 Java開発の強力な相棒として今すぐ使えるGroovy Groovy Bootcamp 2015 by JGGUG What's hot (19)
enterprise grails challenge, 2013 Summer Markup Template Engine introduced Groovy 2.3 Introduce Groovy 2.3 trait New features of Groovy 2.0 and 2.1 Jjug 20140430 gradle_basic Indy(Invokedynamic) and Bytecode DSL and Brainf*ck Spring in-summer-gradle-hands on-withanswers GroovyServ concept, how to use and outline. node-gypを使ったネイティブモジュールの作成 Jjug 20140430 gradle_advanced Similar to Groovy base gradle_20130309 (20)
Gradle a new Generation Build Tool Agileツール適合化分科会(構成管理・ビルドツール) Gws 20141024 gradle_intro Androidアプリ開発で活躍必至!? ビルドツールGradle Jjug 20140430 gradle_intro Android App Development with Gradle & Android Studio 20150425 DroidKaigi つかえるGradleプロジェクトの作り方 Groovy Grails eXchage 2014 報告 Groovy kisobenkyoukai20130309 More from Nobuhiro Sue (20)
Fuse Online Hands-on Guide Fuse Online Hands-on Guide JTF2018_B30_k8s_operator_nobusue DevLove k8s nobusue 20180711 JSUG20171027-spfingboot-k8s-ocp Light and shadow of microservices Gws 20140418 camel_groovy 20140329_kyon_kao_wedding_LT_Groovy Gws 20131018 vertx_handson(updated) Letsgo developer 2012 Continuous Delivery G*workshop 2011/11/22 Geb+Betamax 20111031 MobileWeb at TDC JJUG CCC 2011 Fall / Web test automation with Geb and Spock Letsgo sendai nobusue_20110528 Groovy base gradle_20130309
- 1. Groovy基礎勉強会:
Gradleの基礎
2013.03.09
須江信洋(@nobusue)
http://d.hatena.ne.jp/nobusue
https://www.facebook.com/nobuhiro.sue
- 2. 自己紹介
須江 信洋(すえ のぶひろ)
Twitter: @nobusue
https://www.facebook.com/nobuhiro.sue
約10年ほどJavaEE関連の仕事をしてます
最近はPhoneGap(Cordova)とかがメイン
G*(Groovy関連技術)との関わり
JGGUGサポートスタッフ
「プログラミングGROOVY」執筆チーム
「Groovy イン・アクション」翻訳チーム
Groovyで作ったBot飼ってます(@hatena_groovy)
2
- 3. ビルドツールの進化
パラダイム
手続き的 規約によるビルド
ビルド定義
スクリプト Make Gradle
XML Ant Maven
3
- 4. ビルドツールの進化: epoch1
パラダイム
POM(Project規約によるビルド
手続き的 Object Model)
ビルド定義 ビルドに「ドメインモデル」を導入
スクリプト Make Gradle
XML Ant Maven
4
- 5. ビルドツールの進化: epoch2
Gradle Build Language
パラダイム
ビルドを「言語内DSL」で記述
手続き的 規約によるビルド
ドメインモデルをGroovyで自由に操作
ビルド定義
スクリプト Make Gradle
XML Ant Maven
5
- 6. http://gradle.org/
Ant/Mavenの課題を解決する次世代ビルドツール
AntとMavenの「いいとこどり」 2013/3/9現在
HibernateやSpringSourceで使われている 最新は1.4
標準化と柔軟性の両立
Mavenライクな標準ディレクトリ構造を使い、そこから外れ
る部分は自由にカスタマイズ可能
依存ライブラリはMavenリポジトリでもローカルJARでも好
きなように定義できる
マルチプロジェクトへの対応が容易
ビルドスクリプトはGroovyで記述
DSLによるシンプルかつ可読性の高いビルド定義
条件分岐や繰り返しなど、任意の処理をGroovyで
6
- 7. Gradleのビルドスクリプト(例)
apply plugin: 'java' Javaプラグインを適用
repositories {
mavenCentral() 依存性解決にMavenリポジトリを利用
}
プロダクトコードのコンパイル時の依存先
dependencies {
compile(
group: 'commons-collections',
name: 'commons-collections',
version: '3.2')
testCompile( テストコードのコンパイル時の依存先
group: 'junit',
name: 'junit',
version: '4.+')
}
7
- 9. Gradle DSL
疑問
build.gradleに書いてある”apply”と
か”repositories”とか”dependencies”とか何?
なんかGroovyスクリプトと違くね?
回答
applyもrepositoriesもdependenciesも実はメ
ソッドです(引数のカッコを省略してるだけ)
Gradleの文法はGroovyの内部DSLとして定義
9
- 10. 今日のお題: Gradleの基礎
「基礎とは入門ではない」 by @kyon_mm
入門編は別の機会に
Gradleの根幹となる「仕組み」を理解したい
そのためには、プラグインを作ってみるのが
早道だと考えます
プラグインを開発するには、Gradleのドメインモデ
ルやビルドエンジンの仕組みの理解が不可欠
とはいえ、時間も限られますので、とっかりとなる
情報をなめるだけにしておきます
10
- 11. Gradle DSLのエントリーポイント
Gradleビルド言語リファレンス
http://gradle.monochromeroad.com/docs/
dsl/index.html
11
- 12. Gradleの代表オブジェクト
org.gradle.api.Project
ビルドスクリプト(build.gradle)に対応
中核となるオブジェクト
ビルドスクリプト内では暗黙的に、もしくはproject
プロパティで参照
12
- 13. Gradleの代表オブジェクト
org.gradle.api.invocation.Gradle
実行中のビルドエンジンに対応
初期化時の情報や、環境情報を保持
Project.getGradle() で取得可能
13
- 14. Gradleの代表オブジェクト
org.gradle.api.initialization.Settings
settings.gradleに対応
マルチプロジェクト構成時にプロジェクト階層の情
報を保持
14
- 15. プラグインへの道(1/2)
カスタムタスクを作る
1. ビルドファイル内にtask{}を作る
2. ビルドファイル内にDefaultTaskのサブクラスを
作る
3. カスタムタスクをbuildSrc/に分離する
⇒依存関係は自動的に解決される
4. スタンドアロンプロジェクトとして分離する
⇒参照側からclasspathに追加する必要あり
テスト支援
org.gradle.testfixtures.ProjectBuilder
15
- 16. プラグインへの道(2/2)
カスタムプラグインを作る
1. ビルドファイル内にPluginインターフェースの実
装クラスを作る(apply()を実装)
2. プラグインをbuildSrc/に分離する
⇒依存関係は自動的に解決される
⇒マルチプロジェクトの場合はルートに配置
3. スタンドアロンプラグインとして分離する
⇒参照側は依存関係を追加して、apply plugin
プラグイン独自プロパティ
Extension Container(project.extensions)
にJava Beanを追加し、透過的に参照できる
16
- 17. タスクとプラグイン
タスク
何らかの「処理」を行うもの
Antのタスクを想像してもらえばよいです
プラグイン
タスク/コンフィグレーション/プロパティ/メソッド/コ
ンセプトなどの拡張を含むモジュール
例えばjava-baseプラグインは”sourcesets”と
いう概念のみを提供し、Javaプラグインがそれを
利用している
メタデータ(META-INF/gradle-plugins)を持つ
17
- 18. 便利メソッド/プロパティ
file()
相対/絶対パス、Fileオブジェクト、URLなど
PathValidationでいろいろ判定可能
files()
ファイルのコレクション(filter可能)
引数としてファイルを返すtaskを渡せる
fileTree()
ファイルのツリー階層をトラバース(visit)可能
Antのpathelement式でinclude/exclude可能
logger
SLF4J Loggerのインスタンス
標準出力への出力はQUIETレベルにリダイレクト
18
- 19. 拡張プロパティ
Gradleのドメインモデルにプロパティを追加する
際には、extプロパティ(extブロック)を使うこと
Gradle-1.0M9からこちらが強く推奨されています
現在は互換性のため未定義のプロパティがあってもエ
ラーにならないが、警告が出ます
ローカル変数(def)と異なり、ドメインモデルのラ
イフサイクル全体で利用できます
詳細はこちらの「13.4.2. 拡張プロパティ」を参照
http://gradle.monochromeroad.com/docs/use
rguide/writing_build_scripts.html
19
- 21. Gradleと仲良くなるために
Gradle 日本語ドキュメント(@literaliceさん)
http://gradle.monochromeroad.com/docs/in
dex.html
ビルドツールGradle スタートアップガイドの紹介
http://www.ntts.co.jp/publish/column/tec/ja
va_03/index.html
GVM:the Groovy enVironment Manager
http://gvmtool.net/
groovy/grails/gradle/griffon/vert.x
21
- 22. おすすめ書籍
“Gradle Effective Implementation
Guide” Hubert Klein Ikkink (mrhaki)
http://mrhaki.blogspot.de/search/label/Gr
adle%3AGoodness の人の本です
22
- 23. Gradleに入門したい?
G*ワークショップZ 3/15はGradleハンズオン
やります。ぜひご参加ください。
http://jggug.doorkeeper.jp/events/3007
23
- 24. ありがとうございました
http://nekofont.upat.jp/
24