Jjug 20140430 gradle_basic

7,128 views
7,213 views

Published on

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

Published in: Software
0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,128
On SlideShare
0
From Embeds
0
Number of Embeds
5,079
Actions
Shares
0
Downloads
26
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

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

×