Upload
lee-choong-geun
View
2.577
Download
0
Embed Size (px)
Citation preview
Gradle入門
2015/11/20 Javaツール勉強会@福岡李充根
自己紹介
• 名前:李充根 (リ・チュングン )• HN:りぐん (ligun)• Twitter:@choonggeun• FB: choonggeun• GitHub: ligun• 使用言語: Java、 C#、Groovy• PO(Precure Ojisan)、 PDDエンジニア
– groovycure• https://github.com/ligun/groovycure/
– http://momozono.love• 最近OSSにプルリク送ったりQiitaに投稿したりしています
2015/11/20 Javaツール勉強会@福岡 2
はじめに
• Ant、Maven使ったことありません– はじめて触ったビルドツールが Gradleってだけなので詳細な比較や使用感の違いとかは説明できません
– Gradle触り始めたきっかけはビルドツールが必要になった時一番新しそうなのが Gradleだったってのと、もともと Groovy使いだったから
2015/11/20 Javaツール勉強会@福岡 3
Gradleとは?
• 比較的後発な Java、 JVM言語用ビルドツール– Java以外にも Groovy、 Scalaなどの JVM言語、試験的なプラグインだが C/C++なども扱うことができる
• Gradle自体は Groovyで作られた DSL– そのため Javaと似た文法で独自タスクを定義できる
• 現在 2.9まで正式版が出ている– もうすぐ 3.0にバージョンアップ
• 少し記述が変わるかも• Android Studioで標準対応してから一般的になった?
2015/11/20 Javaツール勉強会@福岡 4
他のビルドツールとの違い
• XMLではなく独自 DSL– 設定ではなく処理– 見やすい (人による? )– 拡張性が高い
• DSLとしての書き方を覚えなければならない• 依存関係の管理は内部的に Apache Ivyを使用している• Gradle Wrapperを使用すると Gradleをインストールしていない PCでもビルドできる– CIツールに導入する時に楽
• Ant、Mavenとできる事自体大きく違わないけど楽できる
2015/11/20 Javaツール勉強会@福岡 5
導入方法
• 各OS– Gradleのページから ZIPで落とす
• Unix、 Linux、 Cygwin– SDKMANを導入する (こっちがおすすめ )
• SDKMANとは?– 元々GVMと名乗っててGroovy系ツールをバージョン管理できる、 Rubyで言う RVMや rbenvのようなもの
– 最近名前が変わって (Go用のアレと名前かぶってたせい )、Groovy以外にも JVMの各ツールが導入できるようになった• Scala、 Ceylon、Maven、 Spring Boot、 etc…
2015/11/20 Javaツール勉強会@福岡 6
SDKMANを使った導入
• SDKMANインストール$ curl -s get.sdkman.io | bash
• 端末再起動• Gradleインストール
$ sdk install gradle• 確認
$ gradle --version
• その他 SDKMANの使い方などは下記参考– http://sdkman.io
2015/11/20 Javaツール勉強会@福岡 7
Gradle事始め• Gradleプロジェクトを作ってみる
– プロジェクト名:gradlesample1• ディレクトリ作成
$ mkdir gradlesample1• Gradleプロジェクト作成
$ cd gradlesample1$ gradle init
• 下記のようなディレクトリ構成になるgradlesample1├── build.gradle├── gradle│ └── wrapper│ ├── gradle-wrapper.jar│ └── gradle-wrapper.properties├── gradlew├── gradlew.bat└── settings.gradle
Gradle Wrapper本体
Gradleスクリプト
マルチプロジェクト用設定ファイル
Gradle Wrapper用シェルファイル
2015/11/20 Javaツール勉強会@福岡 8
Gradleでビルド
• 最低限必要なのは– build.gradle
• ここにタスクなどを書く– Javaプロジェクトの場合下記のように書けば良い
apply plugin: ‘java‘
repositories { jcenter()}
dependencies { compile 'org.slf4j:slf4j-api:1.7.7' testCompile ‘junit:junit:4.11’}
2015/11/20 Javaツール勉強会@福岡 9
スクリプト説明
• apply plugin– 必要なGradleプラグインを適用する
• 今回は Javaプロジェクトなので Java• その他例えば IntelliJで使いたいときは ideaプラグインも適用すると便利
• repositories– 使用するMavenリポジトリ
• jcenterを選択して問題ない (mavenCentralも書くことできるけど基本的にjcenterにあるので意味ないかも )
• サードパーティなリポジトリもURL定義すれば使えます• dependencies
– ビルド時やテスト時に必要なライブラリを定義します• ロガーとして SLF4J、テスト時に JUnit4を使えるようにしています
– compile → プロダクトコードビルド時に必要なライブラリ (slf4jや logback等 )– testCompile → テストで必要なライブラリ (テスティングフレームワーク等 )– その他プラグインによって他の定義もある
2015/11/20 Javaツール勉強会@福岡 10
ソースコードの階層
• ソースディレクトリは Gradleプロジェクトディレクトリ以下に次のような階層にすると自動的に読み込まれるsrc├── main│ └── java│ └── packagename└── test └── java └── packagename
• Mainにプロダクトコード、 testにテストコードを記述する
2015/11/20 Javaツール勉強会@福岡 11
ビルドの実行
• build.gradleのあるディレクトリで下記コマンドを入力$ gradle build各プロセスが走り、正常にビルドされると「 BUILD SUCCESSFUL」と表示される
• テストを実行したい場合は$ gradle testと入力する
2015/11/20 Javaツール勉強会@福岡 12
Lazybonesを使った新規作成時の時間節約
• Gradleでプロジェクトを作る度にソースディレクトリの階層を作ったり、初期スクリプトを書くのは面倒ですよね
• IDEを使うと低減されることもありますが、社内だけで定型化されているようなものまでは自動化できませんよね
• Lazybonesというツールを使えばこれが可能になります
• 簡単に言うと予め用意された Gradle用のテンプレートを呼び出すだけで使えるようにするツールです
2015/11/20 Javaツール勉強会@福岡 13
Lazybonesの導入• SDKMANを使ってインストールできる
$ sdk install lazybones
• Lazybonesを使ってGradleプロジェクトを作成$ lazybones create java-basic projectname
• projectnameディレクトリができていて下記のような階層になっているprojectname├── build.gradle├── gradle.properties├── README.md└── src ├── main │ └── java └── test └── java
2015/11/20 Javaツール勉強会@福岡 14
Lazybonesの使い方
• build.gradleには最低限の記述が書かれている• java-basic以外のテンプレートは「 lazybones list」を実行するとみることができる
• その他標準テンプレート以外にも Lazybonesの設定に自分のリポジトリを追加することでオリジナルなテンプレートを作成することもできる– 例えば毎回使うツールが決まっていて
JUnit+SLF4J+Logbackを使うといった場合、更にパッケージ名は会社のドメインとかだと、それが設定されているテンプレートを作るととても便利になる
2015/11/20 Javaツール勉強会@福岡 15
Gradleでスクリプトを実行する
• Gradleではタスクを自由に定義できる– 例えば build.gradleに次のように記述する
task hello << { println “hello world”}
– gradle helloを実行すると「 hello world」が出力される
……• これだけだと何が嬉しいかいまいちわからない
2015/11/20 Javaツール勉強会@福岡 16
Gradleタスクのための例題
• まずは前提– Javaで実行可能な Jarを起動するときこう書きますよね
java –jar hoge.jar– 実はこの時 Jarファイルの先頭にゴミデータが有っても javaコマンドはよしなに扱ってくれます
– そのため次のようなシェルスクリプトを先頭に書いてJarを結合するとあたかも通常のコマンドのように扱えます
#!/bin/shjava –jar "$0" "$@“exit $?
2015/11/20 Javaツール勉強会@福岡 17
Gradleタスクのための例題
• このようなファイルを作るにはシェルスクリプトを書けば簡単です (先ほどのシェルスクリプトを bootstrap.shとして )$ cat bootstrap.sh hoge.jar > hoge
• このようにして hogeファイルを /usr/local/binあたりにでも突っ込めばコマンド実行できます
• これをGradleタスクとして定義し、Gradleコマンドから作成できるようにするとビルド時に一緒に吐き出せて便利ですよね– Gradleだと環境に依存しない– ちなみに一つにまとめるのではなく Jarとキッカースクリプトの形でなら標準の applicationプラグインを使えば「 gradle installDist」コマンドで作成できます
2015/11/20 Javaツール勉強会@福岡 18
時間が余ったら説明
• スクリプト– https://gist.github.com/ligun/1294b32ddf6fbdabfce3
• task jarsh– 今回定義するタスク
• 通常の Jarではなく依存ライブラリも含めたものを作成• Jarの名前は「 projectname-fullpack.jar」
– 処理内容は以下のとおり• フルパック Jarを作成• jarshディレクトリを作成• jarshディレクトリに bootstrapと Jarを固めたものを
Unix用と Linux用両方を作成
2015/11/20 Javaツール勉強会@福岡 19
おわりに
• 色々と駆け足で説明しましたがやってみたら簡単です– ビルドツールあまり使ったことなかった自分でも自力である程度扱えるようになりました• 一度 Antやろうと思ったことありましたが、その時は理解できずに諦めた記憶が……
• Javaっぽい (比較的 )見慣れたDSLで定義できます– Groovyを覚えていたらより便利になりますが Java文法で書いても実行できるので最初は Javaで処理しても問題ありません
• 次回も SpockとかGroovy製の便利なフレームワークを紹介できたらいいな
2015/11/20 Javaツール勉強会@福岡 20
ご清聴ありがとうございました
2015/11/20 Javaツール勉強会@福岡 21