Submit Search
Jjug 20140430 gradle_basic
•
15 likes
•
8,709 views
Takuma Watabiki
Follow
2014/4/30 JJUGナイトセミナーでの資料です。
Read less
Read more
1 of 35
Download now
Downloaded 29 times
More Related Content
Jjug 20140430 gradle_basic
1.
2014.04.30 綿引琢磨(@bikisuke) http://d.hatena.ne.jp/bikisuke/
[email protected]
2時間で分かる! 次世代ビルドツールの本命Gradleの 全貌 ∼基礎編∼
2.
2 自己紹介 綿引 琢磨(わたびき
たくま) Twitter: @bikisuke https://www.facebook.com/takuma.watabiki.3 株式会社デライトテクノロジーズ代表取締役 日本Grails/Groovyユーザーグループ運営委員 最近興味を持っているもの Spring Boot / TERASOLUNA Global Framework もちろんG* (ry Gradle本 (執筆中)
3.
基礎編 目次 Gradleの基礎
Gradleのアーキテクチャ Gradleの三大要素 Java プロジェクト with Gradle Java プロジェクトの生成 Java プラグインによるビルド マルチプロジェクト with Gradle マルチプロジェクトへの適用 ビルドスクリプトの定義 3
4.
4 Gradleの基礎
5.
Gradle のアーキテクチャ 自動化のための基盤とプラグイン機構による 粗結合な構造
自動化のためのインフラとドメインオブジェクト群 基盤だけでは何も出来ないに等しい 直感的なドメインオブジェクトAPI 強力なプラグイン機構 標準的な機能も全てがプラグイン シンプルなインタフェースで追加が容易 既存のプラグインの拡張や統合も可能 5
6.
Gradle のアーキテクチャ 6 Java JVM Groovy OSS
ライブラリ Gradle コアライブラリ Gradle 標準プラグイン サードパーティ/オレオレ プラグイン ビルドスクリプト Gradle
7.
Gradleの三大要素 プロジェクト 処理対象を表すコアドメイン
必ず1つ以上のプロジェクトが存在 タスク 作業単位を表すコアドメイン ユーザーが実行できる最小単位 プラグイン 特定処理のための機能コンポーネント タスク、プロパティ、規約などをパッケージング 7
8.
apply plugin: 'java' repositories
{ mavenCentral() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println 'myTest task executed.' } DSLとドメインオブジェクトの関係 8 ビルドスクリプトに定義した内容が、 処理対象のProjectオブジェクトとなる
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.
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 Javaプロジェクト with Gradle
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.
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
15.
ビルドのタスクグラフ 15 gradle build
16.
ビルドのタスクグラフ 16 src/main/java配下のjavaコード をコンパイルし、$buildDir/classes/ mainに出力
17.
ビルドのタスクグラフ 17 src/main/resoueces配下の ファイルを$buildDir/resources/ mainにコピー
18.
ビルドのタスクグラフ 18 src/test/java配下のjavaコード をコンパイルし、$buildDir/classes/ testに出力
19.
ビルドのタスクグラフ 19 src/test/resoueces配下のファ イルを$buildDir/resources/testに コピー
20.
ビルドのタスクグラフ 20 $buildDir/libsに JARファイルを生成
21.
ビルドのタスクグラフ 21 JUnit(xUnit)/TestNGを実行
22.
ビルドのタスクグラフ 22 BUILD SUCCESS!
23.
Javaのビルドでよく使用するプロパティ 23 タスク プロパティ 用途 compileJava/ compileTestJava options エンコーディングやブートクラスパスなどのコンパ イルオプションを追加する際に使用 jar
archiveName JARファイル名を設定する際に使用 test minHeapSize テストプロセスに-Xmsを設定する際に使用 test maxHeapSize テストプロセスに-Xmxを設定する際に使用test jvmArgs ヒープ以外のJVMパラメータを設定する際に使用 - sourceCompatibility コンパイル時に使用するJavaのバージョン - targetCompatibility クラス生成時のターゲットとするJavaのバージョン
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 マルチプロジェクト with Gradle
26.
マルチプロジェクトへの適用 基点となるルートプロジェクトに、サブプロジ ェクトがツリー構造を成す デフォルトではsettings.gradleが配置されたディレクト リがルートプロジェクトとなる
settings.gradleにサブプロジェクト構成を定義 Gradleがサポートするレイアウトは以下の2つ 階層レイアウト フラットレイアウト 26
27.
マルチプロジェクトへの適用 階層レイアウト 階層的な構造のプロジェクトで構成される
settings.gradle 27 include ‘jonathan’, ‘george’, ‘joseph’ <ROOT_PROJECT> ├ jonathan ├ george ├ joseph ! ├ settings.gradle " build.gradle
28.
マルチプロジェクトへの適用 フラットレイアウト 同一階層のプロジェクトで構成される
settings.gradle 28 includeFlat ‘giorno’, ‘bucciarati’, ‘mista’ <WORKSPACE> ├ <ROOT_PROJECT> ! ├ settings.gradle ! " build.gradle ├ giorno ├ bucciarati " mista
29.
レイアウトの特徴 レイアウトはルートプロジェクトとサブプロ ジェクトの位置関係で決まる ルートプロジェクトがサブプロジェクトの上位階層
階層レイアウト ルートプロジェクトとサブプロジェクトが同一階層 フラットレイアウト レイアウトはプロジェクト単位のため、組み合わせる ことも可能 29
30.
ビルドスクリプトの定義 ルートプロジェクトに集約 30 subprojects { task
showName << { println “$project.name” } } project(‘:jonathan’) { dependencies { compile project(‘: george’) } } project(‘:george’) { dependencies { compile project(‘: joseph’) } } project(‘:joseph’) { }
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 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
34.
マルチプロジェクトの勘所 ビルドスクリプトについて 基本はルートプロジェクトに共通設定を定義して、差 分を個別のサブプロジェクトに定義するのが定石
サブプロジェクトの数が少ない場合や、選任のビルド 職人がいる場合は、ルートプロジェクトに集約すると 効率が良いかも 複数ベンダーで開発するような場合は、個別に定義し た方が平和に治まることもある 34
35.
以上、基礎編でした 35 休憩の後は ∼発展編∼ を お楽しみください
Download