gws 20141024 gradle_intro

21
2014.10.24 須江信洋(@nobusue) http://nobusue.hatenablog.com/ https://www.facebook.com/nobuhiro.sue G * ワークショップZ Oct 2014 Gradleイントロダクション &最新動向(~2.1)

Upload: nobuhiro-sue

Post on 27-Jun-2015

2.828 views

Category:

Technology


3 download

DESCRIPTION

Gradle introduction and latest update for G*WorkshopZ 2014/10/24 (Japanese)

TRANSCRIPT

Page 1: Gws 20141024 gradle_intro

2014.10.24 須江信洋(@nobusue)

http://nobusue.hatenablog.com/ https://www.facebook.com/nobuhiro.sue

G*ワークショップZ  Oct  2014Gradleイントロダクション&最新動向(~2.1)

Page 2: Gws 20141024 gradle_intro

2

自己紹介}  須江 信洋(すえ のぶひろ)

}  Twitter: @nobusue }  https://www.facebook.com/nobuhiro.sue

}  約10年ほどJavaEE関連の仕事をしてました }  2013年10月よりフリーランス(個人事業主)

}  最近のお仕事 }  IoT(Internet of Things)のサービス基盤構築 }  AWS / Cloudera Manager / CDH }  Spark / Kafka / OpenTSDB / MongoDB / RStudio }  Groovy / Gradle / SBT / Maven / Jenkins / Vagrant

Page 3: Gws 20141024 gradle_intro

3

Gradleイントロダクション

Page 4: Gws 20141024 gradle_intro

Gradleとは?}  Groovyベースのビルドツール

}  クロスプラットフォーム (JavaVM上で動作) }  Groovyスクリプトでビルドを記述(no more XML) }  ビルド記述を簡潔にするDSLを提供

}  規約と柔軟性の適切なトレードオフ }  Ant: 柔軟だが、自由すぎて非効率的 }  Maven: 規約による効率化、しかし融通が効かない }  Gradle: 規約はあるがカスタマイズ可能

}  既存資産の有効活用 }  Antタスクやビルド定義をそのまま再利用 }  Maven/Ivyリポジトリを利用可能 }  ビルドスクリプト内でJavaライブラリを直接利用可能

4

http://gradle.org/

Page 5: Gws 20141024 gradle_intro

Gradleのビルドスクリプト(例)

5

apply plugin: 'java' repositories { jcenter() } dependencies { compile ‘org.slf4j:slf4j-api:1.7.5’ testCompile ‘junit:junit:4.11’ }

Javaプラグインを適用

依存性解決に jCenter(Bintray)を利用

プロダクトコードの依存ライブラリ

テストコードの依存ライブラリ

Page 6: Gws 20141024 gradle_intro

規約

}  Javaプラグインの(デフォルト)タスク依存関係

6

あくまでデフォルトであり、自由にカスタマイズ可能

Page 7: Gws 20141024 gradle_intro

Antのビルドスクリプト(例)

7

<project name="java-project" basedir="."> <property name="build.dir" value="build"/> <property name="main.src.dir" value="src/main/java"/> <property name="main.classes.dir" value="${build.dir}/classes/main"/> <property name="test.src.dir" value="src/test/java"/> <property name="test.classes.dir" value="${build.dir}/classes/test"/> <property name="test.results.dir" value="${build.dir}/test-results"/> <property name="reports.dir" value="${build.dir}/reports/tests"/> <property name="jar.dir" value="${build.dir}/lib"/> <path id="junit"> <pathelement location="lib/junit-4.11.jar"/> <pathelement location="lib/hamcrest-core-1.3.jar"/> </path> <target name="clean"> <delete dir="${build.dir}"/> </target> <target name="compile"> <mkdir dir="${main.classes.dir}"/> <javac srcdir="${main.src.dir}" destdir="${main.classes.dir}" includeantruntime="false"/> </target> <target name="jar" depends="compile"> <mkdir dir="${jar.dir}"/> <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${main.classes.dir}"/> </target>

<target name="testCompile"> <mkdir dir="${test.classes.dir}"/> <javac srcdir="${test.src.dir}" destdir="${test.classes.dir}" includeantruntime="false"> <classpath> <path refid="junit"/> <path location="${jar.dir}/${ant.project.name}.jar"/> </classpath> </javac> </target> <target name="junit" depends="jar,testCompile"> <mkdir dir="${test.results.dir}"/> <junit printsummary="yes"> <classpath> <path refid="junit"/> <path location="${jar.dir}/${ant.project.name}.jar"/> <path location="${test.classes.dir}"/> </classpath> <formatter type="xml"/> <batchtest todir="${test.results.dir}"> <fileset dir="${test.classes.dir}"/> </batchtest> </junit> </target> <target name="junitreport" depends="junit"> <mkdir dir="${reports.dir}"/> <junitreport todir="${reports.dir}"> <fileset dir="${test.results.dir}" includes="TEST-*.xml"/> <report todir="${reports.dir}"/> </junitreport> </target> </project>

Page 8: Gws 20141024 gradle_intro

Gradle DSL} Gradleが独自に定義する「ビルド」記法 }  build.gradleで記述する apply / repositories /

dependencies など }  GroovyのMOPなどを利用して定義

} DSLの解釈 }  apply / repositories / dependenciesの実体はメソッド

} 引数のカッコを省略している(Groovyの記法) }  {} の部分はGroovyのクロージャ

}  メソッドのレシーバはGradleが提供するドメインオブジェクト

8

Page 9: Gws 20141024 gradle_intro

Gradleインストール方法}  前提

}  JDK 6以上 }  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 にパスを通しておく

9

Page 10: Gws 20141024 gradle_intro

動作確認

}  gradle -v

10

GVMでインストールした場合は ~/.gvm/gradle/<version> 以下に導入され、 ~/.gvm/gradle/current にシンボリックリンクが作成されます

Page 11: Gws 20141024 gradle_intro

11

Gradle最新動向(~2.1)

Page 12: Gws 20141024 gradle_intro

Gradle2.0~2.1の主要アップデート}  Gradle2.0

}  メジャーバージョンアップに伴うアーキテクチャの整理と 古い機能の改廃

}  ベースのGroovyの最新化 (1.8.6 → 2.3.2) }  Java 8サポート

}  Ivy / Maven リポジトリへのSFTP接続サポート

}  Gradle2.1

}  ベースのGroovyの最新化 (2.3.2 → 2.3.6) }  plugins ブロックとプラグインポータルによりプラグイン適用が容易に

}  プラグイン開発プラグイン(java-gradle-plugin)の追加

}  Javaソースのインクリメンタルコンパイル対応

}  exclude 指定をmaven-publishプラグインが発行するPOMに反映

}  ビルドによって生成されるコンポーネントの詳細情報表示タスク(components)の追加

12

Page 13: Gws 20141024 gradle_intro

コミュニティプラグイン適用(~2.0)

13

buildscript { repositories { jcenter() } dependencies { classpath "com.bmuschko:gradle-tomcat-plugin:2.0" } } apply plugin: "com.bmuschko.tomcat"

Page 14: Gws 20141024 gradle_intro

コミュニティプラグイン適用(2.1~)

14

plugins { id "com.bmuschko.tomcat" version "2.0" }

プラグインポータルに登録されていることが前提

Page 15: Gws 20141024 gradle_intro

Gradleプラグインポータル

15

http://plugins.gradle.org/

Page 16: Gws 20141024 gradle_intro

インクリメンタルコンパイル対応

} 変更のあったJavaソースのみ再コンパイル }  2.0までは、ソースセットに含まれるJavaソースのうち

一つでも変更があれば、全体を再コンパイル }  2.1では再コンパイルを必要最小限に }  Antのjavacタスクをやめ、Gradle独自コンパイラへ }  デフォルトでは無効化されている

} インクリメンタルコンパイルの効果 }  ビルド時間短縮 }  バイトコード処理や動的クラスリロードを行う場合

の影響範囲の最小化

16

Page 17: Gws 20141024 gradle_intro

インクリメンタルコンパイル有効化}  ビルドスクリプト or 初期化スクリプトに追記

}  初回ビルド時にクラス解析データを記録し、以降は差分をチェックする

17

allprojects { tasks.withType(JavaCompile) { options.incremental = true } }

Page 18: Gws 20141024 gradle_intro

18

参考情報

Page 19: Gws 20141024 gradle_intro

Gradle関連情報} Gradleドキュメント }  http://www.gradle.org/documentation

} Gradleドキュメント(日本語翻訳版) }  http://gradle.monochromeroad.com/docs/index.html

⇒公式ドキュメントに移行予定です

} サンプルコード }  gradle-x.x-all.zipの”samples/”以下

} ソースコード }  https://github.com/gradle/gradle

19

Page 20: Gws 20141024 gradle_intro

20

http://www.pixiv.net/member_illust.php?mode=medium&illust_id=4167445

Page 21: Gws 20141024 gradle_intro

21

次は  「Gradleハンズオン基礎編」

です