takeda_san’s blog

JavaFXと機械学習を頑張る方向。

Gradleでビルドがしたい

作業メモ。

JavaのアプリケーションのビルドをMaven、Antで書いてJenkinsで実行みたいなことを今までやってきたのですが、
XMLの設定ファイルをいじったり、プロパティファイルを書いたりが、あまりにも精神力をすり減らす作業なので別のやり方無いかなぁ。
(XMLを人力で書くのが、人類には早すぎると思う)

jenkinsのパイプラインをGroovyで書いてて、ビルドもコードで書けたらいいのになぁと思ってたところ Gradleがそれっぽい?とうわけでGradleやっていきます。
さっそく、ホームページへ。

gradle.org

ご丁寧にOSごとに環境構築方法が書いてありますね。
Windows愛用者の私もニッコリ。

環境構築編

調達

へぇ、SDKMAN!ってやつでインストールするのがナウいのね。
ですが、今回は手動ダウンロード、アンド解凍。
ドキュメント入りのほうがよさそう、ということでComplete, with docs and sourcesって方にしました。

ファイルの配置

ドライブ直下にC:\Gradleって感じで、Gradleフォルダを新規作成。
そのなかに解凍したgradle-4.2.1フォルダを丸ごと入れる。

環境変数に追加

いつもの環境設定画面を開いて
ctrl+e -> 左側のPCで右クリック -> プロパティ -> システムの詳細設定 -> 環境設定
PathにさっきのパスC:\Gradle\gradle-4.2.1\binを追加。
環境変数、いつの間にか、一覧で表示されて編集できるようになってて感動した。
f:id:takeda_san:20171030225827p:plain

動作確認

コマンドプロンプトgradle -v f:id:takeda_san:20171030230007p:plain

すげー、一度も躓かずに動作確認できた。

とりあえずHello world

さっそく、Getting Startedをやっていく。
(なんだか動画の講座もあるっぽいぞ…。至れり尽くせり)

gradle.org

このなかでも、Creating New Gradle Buildsってのが初心者チュートリアルなんかな。

https://guides.gradle.org/creating-new-gradle-builds/

このチュートリアルの各種手順はUnixLinuxのコマンドで書いてあるみたいです。
前に紹介したcmderでやるか同じWindowsのコマンドに読み替えてやる必要がありそう。

takeda-san.hatenablog.com

build.gradleとは

build.gradleというファイルで、依存関係の解決やタスクと呼ばれる作業単位を定義するらしい。
タスクはjenkinsでもあったな。
つまりはスクリプトをこのファイルに書き込むことで、ビルド手順とするということだろうか。
build.xmlとかpom.xmlみたいなもんかね。
XMLを書かなくてよいのは良い。

Gradle wrapperとは

このビルド作業をほかの端末でやる場合に、同じ環境を作らねばならないのですが、このGradle wrapperを使うとコマンド一発で環境構築ができますよということらしい。

確かにgradle wrapperでできたgradlew.batを実行するとgradleのインストールと環境変数の設定をやってくれた。 (ダウンロードに少し時間がかかった)
もうひとつ新しく生成されていたgradlewUnixLinux用のシェルスクリプトファイルらしい。

properties

よくあるproperties形式のパラメータ指定もできるぜ。とのこと
設定値はgradlew propertiesで確認できるとのこと。
リリースバージョンとか、各種ディレクトリパスの定義はここでやればよさそうね。

コアタスク

よく使うような機能はコアタスクとしてあらかじめ定義されていて、すぐ使えるようになっているらしい。
このへんなんかAntっぽい。

タスクの定義と実行

こんな感じのcopyタスクを定義する。
(build.gradleファイルに書き込んでおく)

task copy(type: Copy) {
    from 'src'
    into 'dest'
}

んで、gradlew copyで実行。
どんなタスクが実行可能かはgradlew tasks --allで確認できる。
おー、見事にコピーされてる。

プラグイン

このコアタイプはプラグインという形で配布されている。
プラグイン構文で導入できるらしい。
ちなみにこのplugin構文はファイルの先頭に書かないと怒られるっぽい。
(taskの前なのかな)

ねんがんのHello World

task内でprintln 'Hello, World!'と書くことで、ねんがんのHello, Worldができる。
このチュートリアル内で使っているdoLastみたいな、Gradle内だけで使える文法(こういうのDSLっていうのね)は 別のチュートリアルに入っているので興味のある人は見てねってことらしい。

思ったこと

  • ビルドをスクリプトで書けるのはすごく良い、最高
  • wrapperで環境構築が簡単にできるのがよい
  • コアタスクがあるので、基本的な処理は自分で書かなくて済みそう
  • wrapperとかインターネット経由でファイルの取得ができない環境の場合はどうするんだろうか(Mavenだとお勝手リポジトリで代替できたが、どうやるんだろ)