39
発発発 発発発発発 Gradle 発 発発 ( 発発発発発発発発 ) @literalice

Jjug 20140430 gradle_advanced

Embed Size (px)

DESCRIPTION

2014/04/30 (水) 19:00 - 21:00 JJUG&JGGUG 共催ナイトセミナ 「4.30 2時間で分かる!次世代ビルドツールの本命Gradleの全貌」 「発展編」 会社で使うGradle

Citation preview

Page 1: Jjug 20140430 gradle_advanced

発展編:会社で使う Gradle林 政利 ( 株式会社ドワンゴ ) @literalice

Page 2: Jjug 20140430 gradle_advanced
Page 3: Jjug 20140430 gradle_advanced

会社で使うGradle

Gradle は会社でこそ使うもの

Page 4: Jjug 20140430 gradle_advanced

インクリメンタルビルド

再現性の高い依存関係解決

後方互換性

POM からビルド作成

build.xml の取り込み

Java ラーに優しい

Groovy

Gradle 開発サイクルの制定

リポジトリ互換

気軽なプラグイン作成

簡便なファイル API

Ant タスクが使える

Page 5: Jjug 20140430 gradle_advanced

インクリメンタルビルド

再現性の高い依存関係解決

後方互換性

POM からビルド作成

build.xml の取り込み

Java ラーに優しい

Groovy

Gradle 開発サイクルの制定

リポジトリ互換

気軽なプラグイン作成

簡便なファイル API

Ant タスクが使える

信頼性の高いビルド

気軽なカスタマイズ

既存環境の活用

Page 6: Jjug 20140430 gradle_advanced

信頼性の高いビルド

Page 7: Jjug 20140430 gradle_advanced

俺のパソコンでは動いていたのに…

Page 8: Jjug 20140430 gradle_advanced

Gradle の依存関係キャッシュ管理

repositories { maven { url "http://repo.mycompany.com/maven2" }}dependencies { compile "org.hibernate:hibernate-core:3.6.7.Final" testCompile "junit:junit:4.+"}

Page 9: Jjug 20140430 gradle_advanced

~\.ivy2\cache\com.google.guava\guava\jars\guava-11.0.2.jar

Gradle のキャッシュパス

Ivy のキャッシュパス

~\.gradle\caches\artifacts-26\filestore\com.google.guava\guava\11.0.2\jar\35a3c69e19d72743cac83778aecbee68680f63eb\guava-11.0.2.jar

Page 10: Jjug 20140430 gradle_advanced
Page 11: Jjug 20140430 gradle_advanced

ビルドの信頼性 += Gradle ラッパー

Gradle バージョンの管理

Page 12: Jjug 20140430 gradle_advanced

ビルドツールのバージョンを上げたらヘンなことになった

Page 13: Jjug 20140430 gradle_advanced

Gradle の機能追加サイクル

試験的@Incubating

公開

非推奨@Deprecat

ed削除

代替機能

’’ 公開状態の機能は、非推奨とならない限り決して削除されたり意図的に変更されたりすることはありません。’’

―― Gradle ユーザーガイド付録 C 機能のライフサイクル

Page 14: Jjug 20140430 gradle_advanced

比較ビルド

build.gradle

1.11

1.12

Page 15: Jjug 20140430 gradle_advanced

apply plugin: "compare-gradle-builds"

compareGradleBuilds { sourceBuild { projectDir "." gradleVersion "1.11" } targetBuild { projectDir "." gradleVersion "1.12" }}

Page 16: Jjug 20140430 gradle_advanced

信頼性の高いビルド

Page 17: Jjug 20140430 gradle_advanced

気軽なカスタマイズ

Page 18: Jjug 20140430 gradle_advanced

独自のプラグイン独自のタスク独自のビルドルール…

Page 19: Jjug 20140430 gradle_advanced

プラグインプロジェクト

プラグインプロジェクト

プラグインプロジェクト

プラグインプロジェクト

ビルドライフサイクル

pom.xml

Page 20: Jjug 20140430 gradle_advanced

独自のプラグイン独自のタスク…

Gradle の場合

XXX.java

Page 21: Jjug 20140430 gradle_advanced

気軽なカスタマイズ

Page 22: Jjug 20140430 gradle_advanced

既存環境の活用

Page 23: Jjug 20140430 gradle_advanced

Ant タスクpom.xml

社内リポジトリbuild.xml

Page 24: Jjug 20140430 gradle_advanced

既存の Maven リポジトリを活用

repositories { maven { url "http://repo.mycompany.com/maven2" }}dependencies { compile "org.hibernate:hibernate-core:3.6.7.Final" testCompile "junit:junit:4.+"}

Maven リポジトリ

Page 25: Jjug 20140430 gradle_advanced

既存の Ivy リポジトリを活用

repositories { ivy { url "http://repo.mycompany.com/repo" }}dependencies { compile "org.hibernate:hibernate-core:3.6.7.Final" testCompile "junit:junit:4.+"}

Ivy リポジトリ

Page 26: Jjug 20140430 gradle_advanced

既存のライブラリフォルダを活用

repositories { flatDir dir: "libs"}

dependencies { compile "org.hibernate:hibernate-core:3.6.7.Final" testCompile "junit:junit:4.+"}

Page 28: Jjug 20140430 gradle_advanced

既存の Ant タスクを活用

’’build.xml を利用するよりも、 Gradle ビルドの中で Ant タスクを使う方がはるかに簡単で強力’’

―― Gradle ユーザーガイド第 17 章 Gradle から Ant を使う

’’Gradle では、 Ant のタスクはファーストクラス・オブジェクトです’’

―― Gradle ユーザーガイド第 2 章 概要

Page 29: Jjug 20140430 gradle_advanced

task zip << { ant.zip(destfile:'archive.zip') { fileset(dir: 'src') { include(name: '**.xml') exclude(name: '**.java') } }}

既存の Ant タスクを活用

<target name='zip'><zip destfile= 'archive.zip'> <fileset dir='src'> <include name='**.xml'/> <exclude name='**.java'/> </fileset></zip></target>

XML 版Groovy 版

Page 30: Jjug 20140430 gradle_advanced

既存の build.xml を活用

’’Gradle では、 Ant のタスクはファーストクラス・オブジェクトです。さらにおもしろいことに、 Ant のプロジェクトもまたファーストクラス・オブジェクトなのです’’

―― Gradle ユーザーガイド第 2 章 概要

Page 31: Jjug 20140430 gradle_advanced

既存の build.xml を活用

ant.importBuild "build.xml"

build.gradle

Page 32: Jjug 20140430 gradle_advanced

既存の build.xml を流用ant.importBuild "build.xml"

task war(type: War, dependsOn: "jar") { description = "war ファイルを作成します" classpath("dist/lib/sample-ant-project-0.1.jar") webInf { from ("web/WEB-INF") }}

Page 33: Jjug 20140430 gradle_advanced

既存の pom.xmlを活用

Mavenプラグインは

使えません

Page 34: Jjug 20140430 gradle_advanced

build.gradle

既存の pom.xml を活用

pom.xml

gradle init --type pom

Page 35: Jjug 20140430 gradle_advanced

既存のビルドツールを活用

Page 36: Jjug 20140430 gradle_advanced

’’ 私たちは、ビルドはすべてのチームメンバーに対してできるだけ分かりやすいものであるべきだと考えています。

(中略)

私たちは、 Java 世界の住人にとって断然飛び抜けた分かりやすさを提供する Groovy を選択しました。’’

―― Gradle ユーザーガイド第 2 章 概要

Page 37: Jjug 20140430 gradle_advanced

既存の知識を活用

Page 38: Jjug 20140430 gradle_advanced

インクリメンタルビルド

再現性の高い依存関係解決

後方互換性

POM からビルド作成

build.xml の取り込み

Java ラーに優しい

Groovy

Gradle 開発サイクルの制定

リポジトリ互換

気軽なプラグイン作成

簡便なファイル API

Ant タスクが使える

信頼性の高いビルド

気軽なカスタマイズ

既存環境の活用

Page 39: Jjug 20140430 gradle_advanced

ご清聴ありがとうございました