Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
2014.04.30
綿引琢磨(@bikisuke)
http://d.hatena.ne.jp/bikisuke/
takuma.watabiki@jggug.org
2時間で分かる!
次世代ビルドツールの本命Gradleの
全貌 ∼基礎編∼
2
自己紹介
 綿引 琢磨(わたびき たくま)
 Twitter: @bikisuke
 https://www.facebook.com/takuma.watabiki.3
 株式会社デライトテクノロジーズ代表取締役
 日本Grai...
基礎編 目次
 Gradleの基礎
 Gradleのアーキテクチャ
 Gradleの三大要素
 Java プロジェクト with Gradle
 Java プロジェクトの生成
 Java プラグインによるビルド
 マルチプロジェク...
4
Gradleの基礎
Gradle のアーキテクチャ
 自動化のための基盤とプラグイン機構による
粗結合な構造
 自動化のためのインフラとドメインオブジェクト群
 基盤だけでは何も出来ないに等しい
 直感的なドメインオブジェクトAPI
 強力なプラグイン機...
Gradle のアーキテクチャ
6
Java
JVM
Groovy OSS ライブラリ
Gradle コアライブラリ
Gradle 標準プラグイン
サードパーティ/オレオレ プラグイン
ビルドスクリプト
Gradle
Gradleの三大要素
 プロジェクト
 処理対象を表すコアドメイン
 必ず1つ以上のプロジェクトが存在
 タスク
 作業単位を表すコアドメイン
 ユーザーが実行できる最小単位
 プラグイン
 特定処理のための機能コンポーネント...
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
task myTest(type:Test...
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
task myTest(type:Test...
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
task myTest(type:Test...
11
Javaプロジェクト
with Gradle
Javaプロジェクトの生成
 init タスク(Build Init プラグイン)
 指定された初期化タイプの雛形を生成
 basic : ビルドスクリプト、Gradleラッパーを生成
 pom : pom.xmlを基にビルドスクリプト...
Javaプラグインによるビルド
 Java プラグインとは
 Javaプロジェクトのコンパイル、テスト、アーカイブに
必要なタスク、プロパティ、規約などを提供
 ソースセット: src/main/java, src/main/resour...
ビルドのタスクグラフ
14
ビルドのタスクグラフ
15
gradle build
ビルドのタスクグラフ
16
src/main/java配下のjavaコード
をコンパイルし、$buildDir/classes/
mainに出力
ビルドのタスクグラフ
17
src/main/resoueces配下の
ファイルを$buildDir/resources/
mainにコピー
ビルドのタスクグラフ
18
src/test/java配下のjavaコード
をコンパイルし、$buildDir/classes/
testに出力
ビルドのタスクグラフ
19
src/test/resoueces配下のファ
イルを$buildDir/resources/testに
コピー
ビルドのタスクグラフ
20
$buildDir/libsに
JARファイルを生成
ビルドのタスクグラフ
21
JUnit(xUnit)/TestNGを実行
ビルドのタスクグラフ
22
BUILD SUCCESS!
Javaのビルドでよく使用するプロパティ
23
タスク プロパティ 用途
compileJava/
compileTestJava
options
エンコーディングやブートクラスパスなどのコンパ
イルオプションを追加する際に使用
jar arc...
apply plugin: 'java'
  :
def defaultEncoding = 'UTF-8'
[compileJava, compileTestJava]*.options*.encoding =
defaultEncoding...
25
マルチプロジェクト
with Gradle
マルチプロジェクトへの適用
 基点となるルートプロジェクトに、サブプロジ
ェクトがツリー構造を成す
 デフォルトではsettings.gradleが配置されたディレクト
リがルートプロジェクトとなる
 settings.gradleにサブ...
マルチプロジェクトへの適用
 階層レイアウト
 階層的な構造のプロジェクトで構成される
 settings.gradle
27
include ‘jonathan’, ‘george’, ‘joseph’
<ROOT_PROJECT>
├...
マルチプロジェクトへの適用
 フラットレイアウト
 同一階層のプロジェクトで構成される
 settings.gradle
28
includeFlat ‘giorno’, ‘bucciarati’, ‘mista’
<WORKSPACE>...
レイアウトの特徴
 レイアウトはルートプロジェクトとサブプロ
ジェクトの位置関係で決まる
 ルートプロジェクトがサブプロジェクトの上位階層
 階層レイアウト
 ルートプロジェクトとサブプロジェクトが同一階層
 フラットレイアウト
 ...
ビルドスクリプトの定義
 ルートプロジェクトに集約
30
subprojects {
task showName << { println “$project.name” }
}
project(‘:jonathan’) {
dependen...
ビルドスクリプトの定義
 ルートプロジェクトに共通設定&差分個別
31
subprojects {
task showName() << { println “$name” }
}
root/build.gradle
project(‘:jo...
ビルドスクリプトの定義
 個別に定義
32
task showName() << { println “$name” }
joseph/build.gradle
dependencies { compile project(‘:george’...
マルチプロジェクトの勘所
 レイアウトについて
 特定のシステムやサービスの中で使用することが明ら
かな場合は階層レイアウトが良い
 他システムでも使用するもの、汎用的なライブラリは
フラットレイアウトもしくは単一のプロジェクトとし
てお...
マルチプロジェクトの勘所
 ビルドスクリプトについて
 基本はルートプロジェクトに共通設定を定義して、差
分を個別のサブプロジェクトに定義するのが定石
 サブプロジェクトの数が少ない場合や、選任のビルド
職人がいる場合は、ルートプロジェク...
以上、基礎編でした
35
休憩の後は ∼発展編∼ を
お楽しみください
Próxima SlideShare
Cargando en…5
×

Jjug 20140430 gradle_basic

7.883 visualizaciones

Publicado el

2014/4/30 JJUGナイトセミナーでの資料です。

Publicado en: Software
  • Sé el primero en comentar

Jjug 20140430 gradle_basic

  1. 1. 2014.04.30 綿引琢磨(@bikisuke) http://d.hatena.ne.jp/bikisuke/ takuma.watabiki@jggug.org 2時間で分かる! 次世代ビルドツールの本命Gradleの 全貌 ∼基礎編∼
  2. 2. 2 自己紹介  綿引 琢磨(わたびき たくま)  Twitter: @bikisuke  https://www.facebook.com/takuma.watabiki.3  株式会社デライトテクノロジーズ代表取締役  日本Grails/Groovyユーザーグループ運営委員  最近興味を持っているもの  Spring Boot / TERASOLUNA Global Framework  もちろんG* (ry Gradle本 (執筆中)
  3. 3. 基礎編 目次  Gradleの基礎  Gradleのアーキテクチャ  Gradleの三大要素  Java プロジェクト with Gradle  Java プロジェクトの生成  Java プラグインによるビルド  マルチプロジェクト with Gradle  マルチプロジェクトへの適用  ビルドスクリプトの定義 3
  4. 4. 4 Gradleの基礎
  5. 5. Gradle のアーキテクチャ  自動化のための基盤とプラグイン機構による 粗結合な構造  自動化のためのインフラとドメインオブジェクト群  基盤だけでは何も出来ないに等しい  直感的なドメインオブジェクトAPI  強力なプラグイン機構  標準的な機能も全てがプラグイン  シンプルなインタフェースで追加が容易  既存のプラグインの拡張や統合も可能 5
  6. 6. Gradle のアーキテクチャ 6 Java JVM Groovy OSS ライブラリ Gradle コアライブラリ Gradle 標準プラグイン サードパーティ/オレオレ プラグイン ビルドスクリプト Gradle
  7. 7. Gradleの三大要素  プロジェクト  処理対象を表すコアドメイン  必ず1つ以上のプロジェクトが存在  タスク  作業単位を表すコアドメイン  ユーザーが実行できる最小単位  プラグイン  特定処理のための機能コンポーネント  タスク、プロパティ、規約などをパッケージング 7
  8. 8. apply plugin: 'java' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println 'myTest task executed.' } DSLとドメインオブジェクトの関係 8 ビルドスクリプトに定義した内容が、 処理対象のProjectオブジェクトとなる
  9. 9. apply plugin: 'java' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println 'myTest task executed.' } DSLとドメインオブジェクトの関係 9 JavaPluginが適用されることで、Javaのビルド に必要な機能がProjectに追加される
  10. 10. apply plugin: 'java' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println 'myTest task executed.' } DSLとドメインオブジェクトの関係 10 JavaPluginにより追加された Testタスクを拡張
  11. 11. 11 Javaプロジェクト with Gradle
  12. 12. Javaプロジェクトの生成  init タスク(Build Init プラグイン)  指定された初期化タイプの雛形を生成  basic : ビルドスクリプト、Gradleラッパーを生成  pom : pom.xmlを基にビルドスクリプト、Gradleラッパーを生成  java-library : basic + Java規約ディレクトリ生成  groovy-library : basic + Groovy規約ディレクトリ生成  scala-library : basic + Scala規約ディレクトリ生成  ※ 現在試験的なステータスの機能です 12 gradle init --type <初期化タイプ>
  13. 13. Javaプラグインによるビルド  Java プラグインとは  Javaプロジェクトのコンパイル、テスト、アーカイブに 必要なタスク、プロパティ、規約などを提供  ソースセット: src/main/java, src/main/resources, src/test/java, src/test/resources  タスク: clean, compileJava, test, jar など  プロパティ: sourceSets, sourceCompatibility, reportsDir, testReportDir, archivesBaseName など 13
  14. 14. ビルドのタスクグラフ 14
  15. 15. ビルドのタスクグラフ 15 gradle build
  16. 16. ビルドのタスクグラフ 16 src/main/java配下のjavaコード をコンパイルし、$buildDir/classes/ mainに出力
  17. 17. ビルドのタスクグラフ 17 src/main/resoueces配下の ファイルを$buildDir/resources/ mainにコピー
  18. 18. ビルドのタスクグラフ 18 src/test/java配下のjavaコード をコンパイルし、$buildDir/classes/ testに出力
  19. 19. ビルドのタスクグラフ 19 src/test/resoueces配下のファ イルを$buildDir/resources/testに コピー
  20. 20. ビルドのタスクグラフ 20 $buildDir/libsに JARファイルを生成
  21. 21. ビルドのタスクグラフ 21 JUnit(xUnit)/TestNGを実行
  22. 22. ビルドのタスクグラフ 22 BUILD SUCCESS!
  23. 23. Javaのビルドでよく使用するプロパティ 23 タスク プロパティ 用途 compileJava/ compileTestJava options エンコーディングやブートクラスパスなどのコンパ イルオプションを追加する際に使用 jar archiveName JARファイル名を設定する際に使用 test minHeapSize テストプロセスに-Xmsを設定する際に使用 test maxHeapSize テストプロセスに-Xmxを設定する際に使用test jvmArgs ヒープ以外のJVMパラメータを設定する際に使用 - sourceCompatibility コンパイル時に使用するJavaのバージョン - targetCompatibility クラス生成時のターゲットとするJavaのバージョン
  24. 24. apply plugin: 'java'   : def defaultEncoding = 'UTF-8' [compileJava, compileTestJava]*.options*.encoding = defaultEncoding sourceCompatibility = 1.7 targetCompatibility = 1.7 jar { archiveName = 'jjug-night-seminar' } test { minHeapSize = '512m' maxHeapSize = '512m' jvmArgs '-XX:MaxPermSize=256m' } ビルドスクリプトでの設定例 24
  25. 25. 25 マルチプロジェクト with Gradle
  26. 26. マルチプロジェクトへの適用  基点となるルートプロジェクトに、サブプロジ ェクトがツリー構造を成す  デフォルトではsettings.gradleが配置されたディレクト リがルートプロジェクトとなる  settings.gradleにサブプロジェクト構成を定義  Gradleがサポートするレイアウトは以下の2つ  階層レイアウト  フラットレイアウト 26
  27. 27. マルチプロジェクトへの適用  階層レイアウト  階層的な構造のプロジェクトで構成される  settings.gradle 27 include ‘jonathan’, ‘george’, ‘joseph’ <ROOT_PROJECT> ├ jonathan ├ george ├ joseph    ! ├ settings.gradle    " build.gradle
  28. 28. マルチプロジェクトへの適用  フラットレイアウト  同一階層のプロジェクトで構成される  settings.gradle 28 includeFlat ‘giorno’, ‘bucciarati’, ‘mista’ <WORKSPACE> ├ <ROOT_PROJECT>    ! ├ settings.gradle    ! " build.gradle ├ giorno ├ bucciarati " mista
  29. 29. レイアウトの特徴  レイアウトはルートプロジェクトとサブプロ ジェクトの位置関係で決まる  ルートプロジェクトがサブプロジェクトの上位階層  階層レイアウト  ルートプロジェクトとサブプロジェクトが同一階層  フラットレイアウト  レイアウトはプロジェクト単位のため、組み合わせる ことも可能 29
  30. 30. ビルドスクリプトの定義  ルートプロジェクトに集約 30 subprojects { task showName << { println “$project.name” } } project(‘:jonathan’) { dependencies { compile project(‘: george’) } } project(‘:george’) { dependencies { compile project(‘: joseph’) } } project(‘:joseph’) { }
  31. 31. ビルドスクリプトの定義  ルートプロジェクトに共通設定&差分個別 31 subprojects { task showName() << { println “$name” } } root/build.gradle project(‘:jonathan’) { dependencies { compile project(‘:george’) } } jonathan/build.gradle project(‘:george’) { dependencies { compile project(‘: joseph’) } } george/build.gradle
  32. 32. ビルドスクリプトの定義  個別に定義 32 task showName() << { println “$name” } joseph/build.gradle dependencies { compile project(‘:george’) } task showName() << { println “$name” } jonathan/build.gradle dependencies { compile project(‘: joseph’) } task showName() << { println “$name” } george/build.gradle
  33. 33. マルチプロジェクトの勘所  レイアウトについて  特定のシステムやサービスの中で使用することが明ら かな場合は階層レイアウトが良い  他システムでも使用するもの、汎用的なライブラリは フラットレイアウトもしくは単一のプロジェクトとし ておいた方が柔軟に対応できる 33
  34. 34. マルチプロジェクトの勘所  ビルドスクリプトについて  基本はルートプロジェクトに共通設定を定義して、差 分を個別のサブプロジェクトに定義するのが定石  サブプロジェクトの数が少ない場合や、選任のビルド 職人がいる場合は、ルートプロジェクトに集約すると 効率が良いかも  複数ベンダーで開発するような場合は、個別に定義し た方が平和に治まることもある 34
  35. 35. 以上、基礎編でした 35 休憩の後は ∼発展編∼ を お楽しみください

×