本が出るまで待てない!? Gradleハンズオン - G*ワークショップZ Oct 2014 に行ってきた #jggug
最近ずっと使ってます。Gradle。
今仕事でやってるプロジェクトも Gradle を使っているので、なんという俺得なタイミング、ということで行ってきました。
Gradle 本出版記念ということで、参加者だけのありがたい特典もありました。行ってよかったデス。
コンテンツ
- @nobusue さんの Gradle イントロダクションと 2.0,2.1 の主な変更点
- @literalice さんの Gradle プラグインハンズオン
LT
- @kyon_mm さんの Gradle 2.2, 2.3 の変更点おさらい
- @nobeans さんの OSS 開発の嗜み話
- すいません、資料見つけられませんでした
以下、学び
plugins ブロックとプラグインポータル
- Gradle2.1 で追加された
- 3rd party のプラグインを使うときにより簡単になった
buildscript { repositories { jcenter() } dependencies { classpath "com.bmuschko:gradle-tomcat-plugin:2.0" } } apply plugin: "com.bmuschko.tomcat"
〜2.0までこう書いていたのが、
plugins { id "com.bmuschko.tomcat" version "2.0" }
これで良くなった。ただしプラグインポータルに登録されていることが前提。
インクリメンタルコンパイル
- Gradle 2.1 で追加された
- 変更のあった Java ソースのみ再コンパイルする
- 効果
- ビルド時間短縮
- バイトコード処理や動的クラスリロードを行う場合の影響範囲の最小化
- Ant の javac タスクではなく、Gradle 独自コンパイラに変更された
- デフォルトでは無効となっている
有効にする場合は、
allprojects {
tasks.withType(JavaCompile) {
options.incremental = true
}
}
と設定する。
Gradle プラグインの作成方法
org.gradle.api.Plugin<Project>
インタフェースをimplements
して、apply(Project project)
を実装するbuildSrc
ディレクトリにプラグインのソースコードを突っ込むと、Gradle が自動的にビルドしてくれるmaven-publish
プラグインを使って、ローカルの Maven リポジトリにpublish
することで standalone 的にプラグインが実行できる
plugins { id "groovy" id "maven-publish" } dependencies { compile gradleApi() // Gradle の API にクラスパス通す } group = "com.example.hoge" // Maven リポジトリの名前空間 version = "0.1" /* * 以下は maven-publish プラグインの設定 * http://www.gradle.org/docs/current/userguide/publishing_maven.html */ publishing { publications { mavenJava(MavenPublication) { from components.java } } }
この build.gradle
が含まれているパスで publishToMavenLocal
を叩くと ~/.m2/repository/
以下に publish
される。
- プラグインを作るときは Gradle の DSL リファレンス嫁(まずは Project Core Type)
- Plugin に外部から設定値を渡したい場合は、
Extension
を使う
import org.gradle.api.* class HogePlugin implements Plugin<Project> { @Override void apply(Project project) { project.extensions.create("hoge", HogePluginExtension) // Project に対して extension を "hoge" という名前で設定 println project.hoge.value // 設定した名前+プロパティ } } class HogePluginExtension { // 単なるPOJO(POGO) String value }
利用側の build.gradle
は、
hoge { // create 時に指定した名前 value = "Hello hoge" }
で利用する。
- プラグインのテストは、
org.gradle.testfixtures.ProjectBuilder
を使って Project オブジェクトを作って、そのオブジェクトに対して操作することでテストできる。
Gradle2.2, 2.3 release notes
いいなーと思った変更点
- Component Selection Rules
- Declaring module replacements
- Specify version control system for Intellij IDEA
- support for renaming imported Ant targets
- Sharing configuration files across builds
OSS 嗜み話
- default task と gradle wrapper は設定しておこう
- Java だけ入ってればとりあえずオッケーよ、の Gradle Wrapper はやっぱり強力だなぁと再認識
- あと今度ドキュメント gaiden で書いてみよう
懇親会
- @uehaj さんや @nobusue さんと話せて楽しかった
まとめ
- 行ってよかった特典ゲット
- Gradle 徹底入門買います
Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築
- 作者: 綿引琢磨,須江信洋,林政利,今井勝信
- 出版社/メーカー: 翔泳社
- 発売日: 2014/11/05
- メディア: 大型本
- この商品を含むブログ (2件) を見る
- 世界一詳しい Gradle 本でかつ日本語で出るって素晴らしい
- Gradle プラグインなんか作ってみる
こちらからは以上です。