Jjug 20140430 gradle_advanced

Preview:

DESCRIPTION

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

Citation preview

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

会社で使うGradle

Gradle は会社でこそ使うもの

インクリメンタルビルド

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

後方互換性

POM からビルド作成

build.xml の取り込み

Java ラーに優しい

Groovy

Gradle 開発サイクルの制定

リポジトリ互換

気軽なプラグイン作成

簡便なファイル API

Ant タスクが使える

インクリメンタルビルド

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

後方互換性

POM からビルド作成

build.xml の取り込み

Java ラーに優しい

Groovy

Gradle 開発サイクルの制定

リポジトリ互換

気軽なプラグイン作成

簡便なファイル API

Ant タスクが使える

信頼性の高いビルド

気軽なカスタマイズ

既存環境の活用

信頼性の高いビルド

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

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

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

~\.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

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

Gradle バージョンの管理

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

Gradle の機能追加サイクル

試験的@Incubating

公開

非推奨@Deprecat

ed削除

代替機能

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

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

比較ビルド

build.gradle

1.11

1.12

apply plugin: "compare-gradle-builds"

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

信頼性の高いビルド

気軽なカスタマイズ

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

プラグインプロジェクト

プラグインプロジェクト

プラグインプロジェクト

プラグインプロジェクト

ビルドライフサイクル

pom.xml

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

Gradle の場合

XXX.java

気軽なカスタマイズ

既存環境の活用

Ant タスクpom.xml

社内リポジトリbuild.xml

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

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

Maven リポジトリ

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

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

Ivy リポジトリ

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

repositories { flatDir dir: "libs"}

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

既存の Ant タスクを活用

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

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

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

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

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 版

既存の build.xml を活用

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

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

既存の build.xml を活用

ant.importBuild "build.xml"

build.gradle

既存の 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") }}

既存の pom.xmlを活用

Mavenプラグインは

使えません

build.gradle

既存の pom.xml を活用

pom.xml

gradle init --type pom

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

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

(中略)

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

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

既存の知識を活用

インクリメンタルビルド

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

後方互換性

POM からビルド作成

build.xml の取り込み

Java ラーに優しい

Groovy

Gradle 開発サイクルの制定

リポジトリ互換

気軽なプラグイン作成

簡便なファイル API

Ant タスクが使える

信頼性の高いビルド

気軽なカスタマイズ

既存環境の活用

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