見出し画像

【Javaのお勉強】(Mavenと)Gradleの役割についてのお勉強

Javaプロジェクトに触っていくに当たって、「このGradleというのは何だろう……」と思いながらなんとなく触っていたので、しっかりお勉強します。
主にGradleの話をします。

「Gradleはビルドツールです」「ビルドツールって何ですか」

ビルドツールって、結局何なんですか。コンパイルじゃだめなんですか。状態でしたので、まずそこから。

Javaで書いたプログラムを’きちんと’動かすためには、

・コンパイルして
・ちゃんと動くかテストして
・公開できるように、依存しているライブラリを集めてパッケージ化して
・共有、デプロイする

必要があり、本来は一つ一つコマンド叩いて操作する必要がありました。

でも手作業でやるのはめんどくさいし、色々問題が起きる(みんなで開発しようとするとバージョンが違う!とか、環境が違う!とか)ので、自動的にやってくれる仕組みが色々作られました。

その中でも今のところ一番ナウいのがMavenとGradleだよ、ということ。

ライブラリのバージョンの管理などを自動でやってくれる。

MavenとGradleってどう違うの

Gradleの方がちょっと新しくて、融通が利く。

Mevanの方がコンパクトでシンプル。「変な設定して動かなくなっちゃった!」みたいなことは少ない。

ビルドツールがやってくれること

・決まった構成のディレクトリを用意してくれるので、ディレクトリ構成に悩まなくていい(≓決まったディレクトリ構成にしないとちゃんと動かない)
・ライブラリの依存関係とバージョンを記述しておくだけで、勝手にライブラリを管理してくれる(ライブラリの実体(.jarファイルとか)を自分で管理する必要がない)→基本的には「Mavenセントラルリポジトリ」から探してくるようになっている。
・自動的に、コンパイル→テスト→パッケージ化→公開してくれる。その一連の流れの中でやりたいことを指定できる(このテストとこのテストをやる、公開先はここにする……など)

基本的な使い方のイメージ

1・プロジェクトを新規作成する
(例えばGradleの場合は「spring.initializr」を使うとインストール不要でプロジェクト用に構成されたディレクトリが生成される)

2・設定ファイルにライブラリの依存関係を記述する
(Gradleなら、「bulid.gradle」の「dependencies」ブロックに記述する:後述)(実際には、コードを書きながら「あ、ライブラリ要るな」となったら、ここにも追加する、って感じになる)

3・ビルドの設定をする
(Gradleなら、「build.gradle」にテストの内容を設定したり、そのほかに一緒にやりたいことを設定する)

4・ビルドコマンドを実行する

Gradleでプロジェクトを作ってみる

と、フォルダ構成はこんな感じになる

gradle.buildgradle
┃ └wrapper
┃   └gradle-wrapper.jar
┃   └gradlew-wrapper.proertiesgradlewgradlew.batsettings.gradlesrc
  └main
  ┃ └java
  ┃ └resources
  └test
    └java

注目するファイル

build.gradle:ビルド設定ファイル。必要な事は大体ココに書く

gradle/wrapperの中身:ラッパー。ビルド時に色んなオマケの設定をくっつけてごにょごにょできる……らしい。とりあえずそういうのがあるんだなって。

gradlewとgradlew.bat:build.gradleやらで色々設定した内容でgradleを実行するための実行ファイル。コマンドラインで

$ gradlew hogehoge

ってやって実行する時に呼び出すやつ。

srcフォルダ:この中にソースコードが入る。

build.gradleにライブラリを追加する

・build.gradleファイル内の「dependencies」ブロックに書く。

・ライブラリの指定の際には、「groupID/artifactID/version」が必要。MavenCentralRepositoryから探せる。(元はMaven向けのリポジトリだったけど、Gradleからも使える。今一番メジャーなライブラリのリポジトリ)「Gradle Groovy DSL」をコピーして使うと楽。

・記述方法

plubins{
.....
}
repositories{
.....
}
.....
dependencies{
    implementation 'groupID:artifactID:version'
}

dependenciesブロックを探して、その中に implementation 'groupID:artifactID:version' 形式で記述。
1行に1つ書く。区切り記号は要らない。

・MavenCentralRepositoryに無いライブラリの場合も、設定すれば使える。設定方法は必要になったらググる。

・追加したライブラリの確認をする

$ gradlew dependencies --configuration compileClasspath

※--configuration compileClasspathオプションを付けると、コンパイル時に使うライブラリだけが表示される

「タスク」について

build.gradleファイル内に「タスク」を作ると、

$ gradlew タスク名

で実行できる一連の処理を定義することができる。テストばーっと流したり、ファイルをコピーしたり、Zipにまとめたり、消したり、色々出来るけど、とりあえずデフォルトで定義されているものでも基本のビルドには十分対応できるので、自分でカスタムする必要が出てきたら、詳細はまた調べる。

なお、build.gradleに

task taskName{
    group='groupName'
    description='task-no-setsumei'
.....
}

って記述してある部分があったらそれがタスク。

とりあえず本日はここまで。


この記事が気に入ったらサポートをしてみませんか?