O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
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óximos SlideShares
Carregando em…5
×

Jjug 20140430 gradle_basic

7.925 visualizações

Publicada em

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

Publicada em: Software
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

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 休憩の後は ∼発展編∼ を お楽しみください

×