Submit Search
Jjug 20140430 gradle_intro
•
23 likes
•
10,834 views
Nobuhiro Sue
Follow
1 of 36
Download now
Downloaded 29 times
More Related Content
Jjug 20140430 gradle_intro
1.
2014.04.30 須江信洋(@nobusue) http://d.hatena.ne.jp/nobusue https://www.facebook.com/nobuhiro.sue 2時間で分かる! 次世代ビルドツールの本命 Gradleの全貌 ~導入編~
2.
2 自己紹介 須江 信洋(すえ
のぶひろ) Twitter: @nobusue https://www.facebook.com/nobuhiro.sue 約10年ほどJavaEE関連の仕事をしてます 2013年10月よりフリーランス(個人事業主) 最近興味を持っているもの Vert.x / Storm / Camel / Elasticsearch Vagrant / Docker / Ansible / Serverspec もちろんGroovy / Gradle / Grails Gradle本 (執筆中)
3.
3 JGGUGって? Japan Grails/Groovy
User Group 2009年発足 Grails/GroovyなどのGroovyエコシステム(G*) に関するコミュニティ 2006年から活動していたGrailsコミュニティが前身 毎月第3金曜日にG*ワークショップZを開催 参加型(ハンズオンなど) 告知・申し込みはこちら http://jggug.doorkeeper.jp/ http://www.jggug.org/
4.
導入編 目次 Gradle概要
Gradleとは? Ant/Mavenとの差別化ポイント Gradleの普及状況 Gradleの利用方法 インストール Hello Gradle 参考情報 4
5.
5 Gradle概要
6.
Ant/Mavenの課題を解決する次世代ビルドツール AntとMavenの「いいとこどり」
HibernateやSpringなど、多くのプロジェクトで採用 標準化と柔軟性の両立 Mavenライクな標準ディレクトリ構造を使い、そこから外れる 部分は自由にカスタマイズ可能 依存ライブラリはMavenリポジトリでもローカルJARでも好き なように定義できる マルチプロジェクトへの対応が容易 ビルドスクリプトはGroovyで記述 DSLによるシンプルかつ可読性の高いビルド定義 条件分岐や繰り返しなど、任意の処理をGroovyで実行可能 6 http://gradle.org/
7.
要するにGradleとは? 7 Mavenのように 規約によるビルドで効率的に記述でき、 Antのように プロジェクト特有の事情に柔軟に対応でき、 Makeのように スクリプトのパワーを活かしたビルドが実現できる クロスプラットフォーム対応次世代ビルドツール
8.
ビルドツールの進化 8 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant Maven Gradle
9.
ビルドツールの進化: epoch1 9 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant
Maven Gradle 元祖ビルドツール
10.
ビルドツールの進化: epoch2 10 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant
Maven Gradle JavaとXMLにより クロスプラットフォーム対応を実現
11.
ビルドツールの進化: epoch3 11 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant
Maven Gradle ビルドに 「ドメインモデル(POM)」と 「依存性管理」を導入
12.
ビルドツールの進化: epoch4 12 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant
Maven Gradle ビルドを「言語内DSL」で記述 ドメインモデルをスクリプトで直接操作
13.
Gradleのビルドスクリプト(例) 13 apply plugin: 'java' repositories
{ mavenCentral() } dependencies { compile ‘org.slf4j:slf4j-api:1.7.5’ testCompile ‘junit:junit:4.11’ } Javaプラグインを適用 依存性解決に Maven Centralを利用 プロダクトコードの依存ライブラリ テストコードの依存ライブラリ
14.
Gradle DSL Gradleが独自に定義する文法
build.gradleで記述する”apply”や ”repositories”、”dependencies”など Groovyの標準の文法とは異なる 舞台裏 apply / repositories / dependenciesはメソッド 単に引数のカッコを省略しているだけ(Groovyの 省略記法を利用) メソッドのレシーバはGradleが提供するオブジェクト 14
15.
スクリプトの柔軟性: 条件分岐 15 task "OsDependTask"
<< { def os = System.getProperty("os.name") if(os.contains("Windows")) { //Windows用の処理 } else if(os.contains("Mac OS")) { //Mac OS用の処理 } else { //Linux/Unix用の処理 } } Javaのクラスが 直接使える ifやswitchで 分岐が書ける
16.
規約に合わないプロジェクトへの対応 16 ├── build │ └──
classes │ └── main ├── build.gradle └── src ├── main │ ├── java │ └── webapp │ ├── index.html │ └── WEB-INF │ └── classes └── test └── java 規約: src/main/java ⇒build/classes/main src/main/webapp/WEB-INF/classes 以下にクラスを生成したい
17.
規約に合わないプロジェクトへの対応 以下のようにしてカスタマイズ可能 17 [build.gradle] sourceSets.main.output.classesDir = ‘src/main/webapp/WEB-INF/classes’
18.
マルチプロジェクト 複数プロジェクト(サブプロジェクト)から構成さ れるプロジェクトのビルドを定義 サブプロジェクト間の依存関係を定義可能
依存関係を考慮してビルドを行う サブプロジェクトに共通する処理や設定の一 元化が可能 Gradleのkiller featureの一つ Hibernate Gradle自身のビルド 18 ⇒詳細は「基礎編」で!
19.
Gradleラッパー Gradleの個別導入を不要に JDKさえ導入されていれば、Gradleを自動でイン ストールして実行してくれる仕組み
環境構築の手間を削減し、利用の敷居を下げる Gradleラッパーは以下の用途で有効 JenkinsなどのCI環境での利用 開発者の環境構築負荷軽減 利用するGradleのバージョン統一 19
20.
Gradleラッパー 20 Gradle導入済の環境で"gradle wrapper"を実行 すると、Gradleのブートストラップが生成される バージョン管理 システム等 Gradle 未導入環境 “gradlew <task>”を実行すると、 Gradleが自動的に導入される 登録 取得 Gradle バイナリ (zip) 自動DL
/ 環境設定
21.
g Gradleデーモン Gradleのプロセスを常駐し、起動を高速化 起動
gradle --daemon <task> 停止 gradle --stop デフォルトでdaemonを使う場合 export GRADLE_OPTS= “-Dorg.gradle.daemon=true” もしくは gradle.properties に org.gradle.daemon=true を追加 21
22.
AntからGradleへの移行容易性 Gradleは既存のAnt資産を活用できる Antのbuild.xmlをそのまま読み込んで実行可能
AntタスクをGradleから直接利用可能 AntタスクとGradleタスクを共存することも可能 相互に依存するタスクも定義できる AntタスクをGradleから拡張することもできる Gradleは「Better Ant」としても使える Mavenとの大きな違い Antから段階的にGradleへ移行できる 22 ⇒詳細は「発展編」で!
23.
Gradleの普及状況 SpringやHibernateなど多数のOSSで採用 23
24.
Androidのビルドに採用 24 http://www.gradleware.com/resources/tech/android
25.
ビルドツール動向 25 http://zeroturnaround.com/rebellabs/java-build-tools-part-2-a- decision-Makers-comparison-of-maven-gradle-and-ant-ivy/
26.
26 Gradleの利用方法
27.
Gradleインストール 前提 JDK1.5以上
(“java –version”で確認) 現時点では1.8に未対応なので1.7がおすすめ GVM利用 curl -s get.gvmtool.net | bash gvm install gradle 詳細は http://gvmtool.net/ 参照 (Windowsの場合はCygwinが必要) ZIPを展開 http://www.gradle.org/downloads 適当なディレクトリに展開 ($GRADLE_HOME) $GRADLE_HOME/bin にパスを通しておく 27
28.
動作確認 gradle -v 28 GVMでインストールした場合は
~/.gvm/gradle/<version> 以下に導入され、 ~/.gvm/gradle/current にシンボリックリンクが作成されます
29.
Hello Gradle 適当なディレクトリを作成し、カレントを移動
以下の内容で”build.gradle”を作成 “gradle hello” を実行 29 task hello << { println 'Hello Gradle world!' }
30.
Hello Gradle解説 30 task hello
<< { println 'Hello Gradle world!' } タスクの定義 タスクにクロージャを追加 ※ leftShift()の省略記法 Groovyのprintln = JavaのSystem.out.println()
31.
実行可能タスクの確認 gradle tasks 31
32.
32 参考情報
33.
Gradle関連情報 Gradle 日本語ドキュメント
http://gradle.monochromeroad.com/docs/index.html サンプルコード gradle-1.12-all.zipの”samples/”以下 Gradleプロジェクトのソースコード gradle-1.12-src.zip https://github.com/gradle/gradle GVM:the Groovy enVironment Manager http://gvmtool.net/ Groovy/Grails/Gradle/Vert.x/SpringBootなどに対応 33
34.
Gradle Plugins 34 http://aalmiray.github.io/gradle-plugins/
35.
Gradleロードマップ 2014/4/30時点での最新は1.12 1.xは1.12で最後、次のリリースは2.0
http://forums.gradle.org/gradle/topics/aft er_1_12_comes_2_0 最近の重点強化点 依存関係管理をより柔軟・緻密に ビルドのパラレル化 IDE連携強化 ネィティブ(C言語系)ビルド対応 35
36.
以上、導入編でした 36 引き続き 「基礎編」 を お楽しみください
Download