Submit Search
Gradleどうでしょう
•
39 likes
•
17,225 views
Takuma Watabiki
Follow
G*ワークショップ Z 札幌 2014 のスライドです。 某書の抜粋的な何かです。
Read less
Read more
1 of 46
Download now
Downloaded 55 times
More Related Content
Gradleどうでしょう
1.
Gradleどうでしょう G*workshop Z
sapporo 2014 2014/09/27
2.
自己紹介 •綿引 琢磨(わたびき
たくま) •株式会社デライトテクノロジーズ 代表取締役 •日本Grails/Groovyユーザーグループ 運営委員 •twitter : @bikisuke
3.
すいません、間に合いませんでした... •「Gradle徹底入門(仮)」(翔泳社) •@masanobuimai,
@nobusue, @literalice, @bikisuke の共著 •Gradle2.0ベース(Gradle2.1トピック有) •500ページ超の手頃な鈍器 •2014年11月刊行予定(たぶん...)
4.
今日は刊行より一足先に Gradle徹底入門 を旅することにします。
5.
とはいえ、、、さすがに 全部はできないので 抜粋してお送りします。
6.
本日のアジェンダ • スタートアップGradle
• Javaプロジェクトのビルド • Gradleの基礎 • Gradleでのテスト
7.
スタートアップGradle
8.
Gradleとは • OSSのビルドツール
• 他のビルドツールより優れてる(点が多い) • GroovyベースのDSLで柔軟性が高い • 拡張しやすいアーキテクチャを採用 • 最新バージョンは 2.1(2014年9月時点)
9.
なぜGradleなのか? • ビルドスクリプトがシンプル
• プラグインが作りやすい • 既存のツールの資産を活用できる • Maven Central リポジトリを参照可能 • いろんな言語に対応(中) • Android の公式ビルドツールとして採用 • ここ最近は C/C++ にも力を入れている
10.
ビルドツール比較 make Ant
Maven Gradle ビルド定義 パラダイム 強み 弱み スクリプトXML XML スクリプト 手続き的手続き的規約ベース規約ベース 非常にコンパクト基本機能がシンプル クロスプラットフォーム 規約による標準化 依存関係管理 規約による標準化 依存関係管理 高い柔軟性/拡張性 移植性問題 依存関係管理なし 規約無く再利用に難有り 依存関係管理なし 定義ファイルの柔軟性 規約外の場合が困難 定義ファイルの柔軟性IDE連携にやや難有り
11.
Gradleのインストール • 前提条件:
JDK6以上 • Mac/Unix系:GVMが便利 • http://gvmtool.net/ • $ gvm install gradle • Windows: 公式サイトからダウンロード • http://www.gradle.org/downloads • ZIP解凍して、環境変数Pathに <GRADLE_HOME>bin
12.
Hello, Gradle! //
build.gradle task hello << { println ‘Hello, Gradle!’ }
13.
Build Initプラグイン を使ってみる(1/2)
• Gradle標準プラグインのひとつ • ビルドプロジェクトの雛形を生成 • basic: ビルドスクリプト、Gradleラッパーを生成 • pom: pom.xml からビルドスクリプト、Gradleラッパーを生成 • java-library: basic + Java規約ディレクトリを生成 • groovy-library: basic + Groovy規約ディレクトリを生成 • scala-library: basic + Scala規約ディレクトリを生成
14.
Build Initプラグイン を使ってみる(2/2)
$ gradle init --type java-library : $ gradle build
15.
Javaプロジェクト のビルド
16.
Javaプラグイン •Javaプロジェクトのコンパイル、テスト、 アーカイブに必要なタスク、プロパティ、
規約などを提供 • ソースセット: src/main/java, src/main/resources, src/test/java, src/test/resources • タスク: clean, compileJava, test, jar など • プロパティ: sourceSets, sourceCompatibility, reportsDir, testReportDir, archivesBaseName など
17.
Javaプラグインのタスク
18.
Javaのビルドでよく使用するプロパティ タスクプロパティ用途 compileJava/
compileTestJava options エンコーディングやブートクラスパスなどのコンパ イルオプションを追加する際に使用 jar archiveName JARファイル名を設定する際に使用 test minHeapSize テストプロセスに-Xmsを設定する際に使用 tteesstt maxHeapSize テストプロセスに-Xmxを設定する際に使用 jvmArgs ヒープ以外のJVMパラメータを設定する際に使用 - sourceCompatibility コンパイル時に使用するJavaのバージョン - targetCompatibility クラス生成時のターゲットとするJavaのバージョン
19.
Javaプロジェクトの ビルドスクリプト定義例 apply
plugin: 'java' // Gradle 2.0 def defaultEncoding = 'UTF-8' [compileJava, compileTestJava]*.options*.encoding = defaultEncoding sourceCompatibility = 1.7 targetCompatibility = 1.7 jar { archiveName = 'gws-sapporo.jar' } test { minHeapSize = '512m' maxHeapSize = '512m' jvmArgs '-XX:MaxPermSize=256m' }
20.
Applicationプラグイン を使ってみる(1/2) //
Gradle 2.1 plugins { id ‘application’ } mainClassName = 'com.example.Main'
21.
Applicationプラグイン を使ってみる(2/2) $
gradle run
22.
Gradleの基礎
23.
Gradleのアーキテクチャ ビルドスクリプト サードパーティ/コミュニティ(野良)
プラグイン Gradle 標準プラグイン Gradle コアライブラリ Groovy OSS ライブラリ Java JavaVM
24.
Gradleのアーキテクチャ ビルドスクリプト サードパーティ/コミュニティ(野良)
プラグイン Gradle 標準プラグイン Gradle コアライブラリ Groovy OSS ライブラリ Java JavaVM Gradle
25.
ビルドの入力情報
26.
ビルドの入力情報
27.
初期化スクリプト • ビルドの最初で実行されるGroovyスクリプト
• 主にユーザー情報や実行環境などの初期設定 を行うために使用 • デフォルトは init.gradle • -I (--init-script) <FILE_NAME> でもOK
28.
設定スクリプト • ビルド対象のプロジェクトの設定を行う
Groovyスクリプト • 主にビルドに参加するプロジェクトを定義す る用途で使用 • デフォルトは settings.gradle • -c (--settings-file) <FILE_NAME> でもOK
29.
ビルドスクリプト • ビルドの定義を記述するスクリプトファイル
• ビルド対象がシンプルなものであれば、 このファイル1つあればOK • デフォルトは build.gradle • -b (--build-file) <FILE_NAME> でもOK
30.
スクリプトファイルの構成要素 • ステートメント
• 変数宣言、プロパティ設定など一般 的なプログラミングでのそれと同義 • スクリプトブロック • ある設定を行うための領域 • 実体はただのクロージャで、Gradle のドメインオブジェクトに委譲
31.
Gradleのドメインオブジェクト •Gradleではビルド処理を行う実行基盤 とビルド対象をドメインモデルで表現
•Mavenでいうところの Project Object Model みたいなもの •例えば... •プロジェクト → Projectオブジェクト
32.
Gradleの三大要素 •Projectオブジェクト(プロジェクト) •
処理対象を表すコアドメイン • 必ず1つ委譲のプロジェクトが存在する •Taskオブジェクト(タスク) • 作業単位を表すコアドメイン • ユーザーが実行できる最小単位 •Pluginオブジェクト(プラグイン) • 特定処理のための機能コンポーネント • タスク、プロパティ、規約などをパッケージング
33.
DSLとドメインオブジェクトの関係 apply plugin:
'java' repositories { jcenter() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println '俺のテストタスクを実行したった。' }
34.
DSLとドメインオブジェクトの関係 apply plugin:
'java' repositories { jcenter() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println '俺のテストタスクを実行したった。' } Projectオブジェクト
35.
DSLとドメインオブジェクトの関係 JavaPlugin オブジェクト
apply plugin: 'java' repositories { jcenter() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println '俺のテストタスクを実行したった。' }
36.
DSLとドメインオブジェクトの関係 apply plugin:
'java' repositories { jcenter() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println '俺のテストタスクを実行したった。' } JavaPlugin のTestタスクを拡張
37.
タスクの記述方法いろいろ task showDescription
<< { println description } showDescription.description = 'showDescriptionタスクです。' task showDescription { description = 'showDescriptionタスクです。' doLast { println description } } task showDescription(description: 'showDescriptionタスクです。') << { println description }
38.
Gradleでのテスト
39.
Gradleでできること • JUnit/TestNGのテスト実行
• 特定のテストだけ実行 • テストの並列実行 • etc.
40.
JUnit/TestNGのテスト実行 • JUnit
• Javaプラグインを適用すると デフォルトで使用可能 • TestNG • test ブロックに useTestNG() と 書くことで使用可能になる
41.
特定のテストだけ実行 test {
filter { // 特定のパッケージのテストだけを実行 includeTestsMatching "com.example.*" // クラスのサフィックスが一致するものだけを実行 includeTestsMatching "*IT" } }
42.
テストの並列実行 // 利用可能なプロセッサー数を取得
def processNumber = Runtime.runtime.availableProcessors() test { maxParallelForks = processNumber - 2 }
43.
以上、抜粋でお送りし ましたが、Gradleには もっといろいろな機能や
仕組みがあります。
44.
今日説明してないこと 依存関係管理 カスタムプラグインの作成
IDE連携アーカイブの作成Jenkins連携 Androidプロジェクトでの適用 アーティファクトの公開 独自Gradleの作成 カスタムタスクのAnt/Mavenからの移行 作成 プラグインポータル マルチプロジェクト
45.
ということで、刊行の暁 には、是非とも一読 いただきたく存じます。
46.
ご清聴ありがとう ございました。
Download