Contenu connexe
Similaire à Gradleどうでしょう (20)
Plus de Takuma Watabiki (15)
Gradleどうでしょう
- 2. 自己紹介
•綿引 琢磨(わたびき たくま)
•株式会社デライトテクノロジーズ
代表取締役
•日本Grails/Groovyユーザーグループ
運営委員
•twitter : @bikisuke
- 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
- 13. Build Initプラグイン
を使ってみる(1/2)
• Gradle標準プラグインのひとつ
• ビルドプロジェクトの雛形を生成
• basic: ビルドスクリプト、Gradleラッパーを生成
• pom: pom.xml からビルドスクリプト、Gradleラッパーを生成
• java-library: basic + Java規約ディレクトリを生成
• groovy-library: basic + Groovy規約ディレクトリを生成
• scala-library: basic + Scala規約ディレクトリを生成
- 16. Javaプラグイン
•Javaプロジェクトのコンパイル、テスト、
アーカイブに必要なタスク、プロパティ、
規約などを提供
• ソースセット: src/main/java, src/main/resources,
src/test/java, src/test/resources
• タスク: clean, compileJava, test, jar など
• プロパティ: sourceSets, sourceCompatibility,
reportsDir, testReportDir, archivesBaseName など
- 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'
}
- 30. スクリプトファイルの構成要素
• ステートメント
• 変数宣言、プロパティ設定など一般
的なプログラミングでのそれと同義
• スクリプトブロック
• ある設定を行うための領域
• 実体はただのクロージャで、Gradle
のドメインオブジェクトに委譲
- 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
}
- 41. 特定のテストだけ実行
test {
filter {
// 特定のパッケージのテストだけを実行
includeTestsMatching "com.example.*"
// クラスのサフィックスが一致するものだけを実行
includeTestsMatching "*IT"
}
}
- 42. テストの並列実行
// 利用可能なプロセッサー数を取得
def processNumber =
Runtime.runtime.availableProcessors()
test {
maxParallelForks = processNumber - 2
}