概要
Gradleはオープンソースで開発されているビルド自動化ツールです。
Groovyと呼ばれるスクリプト言語で記述された設定ファイルであり、JVM上で動作する。
プロジェクト立ち上げ期には色々と触る機会が多いと思いますが、
ある程度熟成してくると、build.gradleに依存関係の追加くらいしか触る機会がない方も多いと思います。
以下、各種Gradle関連ファイルの用途について整理致しました。
各種設定ファイル整理
まずはGradle関連ファイルについて、説明します。
Gradleラッパー
Gradleラッパーは、特定のGradleバージョンでプロジェクトをビルド可能にする仕組みです。これにより、開発チーム全員が同じGradleバージョンを使用でき、環境の違いによる問題を回避できます。
gradle-wrapper.properties
使用するGradleバージョンや配布URLを指定するファイルです。
# Gradleのディストリビューションが格納される基本パス
# GRADLE_USER_HOMEは通常、ユーザーのホームディレクトリ内にある隠しディレクトリです。
distributionBase=GRADLE_USER_HOME
# ラッパーのディストリビューションが格納される相対パス
distributionPath=wrapper/dists
# 使用するGradleバージョンとその配布URLを指定
# 必要なバージョンが自動的にダウンロードされます。
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
# ダウンロードしたGradle ZIPファイルの保存場所
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
gradle-wrapper.jar
Gradleラッパーの実行ロジックを含む実行可能なJARファイルです。
build.gradle
Gradleのビルドスクリプトで、プロジェクトの依存関係やビルド手順を定義します。
gradlew / gradlew.bat
gradlew(Linux/Mac用)とgradlew.bat(Windows用)は、
Gradleラッパーを実行するためのスクリプトです。
~~~
@rem Execute Gradle
set JAVA_HOME=%JAVA_HOME:"=%
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
~~~
中身を見てみると前述したgradle-wrapper.jar
のメインクラスorg.gradle.wrapper.GradleWrapperMainを起動しているだけですね。
引数で指定されたタスクを渡して実行する単純な仕組みです。
setting.gradle
プロジェクトの構成を定義するためのファイルです。
マルチプロジェクトの場合に使用。イメージは下記です。
// ルートプロジェクト名を指定
rootProject.name = 'MyProject'
// 含まれるモジュールを定義
include 'module1', 'module2'
下記が最小構成でマルチプロジェクトの検証をしているので、分かりやすいです。
https://qiita.com/YutaSaito1991/items/049412205340c98c67c6
Gradleデーモン
Gradleでは、特に設定を行っていない場合、
gradle XXXを実行するたびにJVMの起動と停止が行われる。
Gradleデーモンを利用すると、JVMのプロセスを常駐させておくことができるので、
起動と停止にかかる時間が省略され、コマンドの実行が早くなる。
引用元:https://qiita.com/maple_syrup/items/096d176000623455b31c
最後に
Gradleのリファレンスがかなりわかりやすくまとまっています。
日本語の書籍も販売していますが、下記を参照するだけで十分な気がしたり。
Gradle入門の同線としてこの記事がお役に立ちますように。
http://gradle.monochromeroad.com/docs/userguide/userguide_single.html#tutorial_java_projects