5分でGradleの全体像を理解する
Gradleの役割
Gradleはプロジェクトのコンパイルや、ライブラリーのインストールなどを行います。
Gradleの構成要素
Project
Projectは基本的にはGradleがコンパイルする対象となるアプリケーションです。アプリケーションのデプロイスクリプトがProjectとして設定されることもあります。
Build Script
build.gradle
に記述されているスクリプトです。build.gradle
はプロジェクトのコンパイルなどを実行します。Build Script
はTaskやDependency, Pluginなどの設定を記述します。
Task
Projectをビルドするためのコマンドなどです。コンパイルだけでなくDeploy、データベースのマイグレーション、Testなど様々なタスクが存在します。
Dependency
Projectが利用するライブラリです。
Plugin
Build Scriptが利用するライブラリです。Dependencyと違ってProjectのソースコードが利用するものではなく、コンパイルプロセスが利用するライブラリです。
Pluginでインポートしたコマンドを、Build Script内で参照して実行することができます。
◇記述例
plugins {
jacoco
}
jacoco {
toolVersion = "0.8.1"
}
jacoco
はBuild Scriptでデフォルトで利用できるメソッドではなく、plugins
ブロックで記述されたjacoco
プラグインによってインポートされるものです。
Gradleのドキュメントを読んでも見当たらないメソッドや、エディタのコード補完が聞かないメソッドはpluginによって読み込まれた記述である可能性があります。
◇Pluginの指定には二個の構文があります。
// 推奨形式
plugins {
jacoco
}
// 非推奨形式
apply(plugin = "jacoco")
ここで詳細は記述しませんが、plugins{}
の方が可読性などの理由から推奨されていますが、制約などもあります。
Repositories
PluginやDependencyが読み込まれるライブラリ提供元です。mervenCentral
はメジャーなライブラリー提供元です。以下のような記述で設定します。
repositories {
mavenCentral()
jecenter() // jcenterは2022/2月で終了予定なので mavernCentralに移行を推奨
maven {
url = "...." // 特定のURLのレポジトリで配布されているmaven形式のライブラリ
}
}
ライブラリはリモートレポジトリだけでなく、ローカルレポジトリやキャッシュなどからも読み込まれます。
◇参考
Gradle's Two type of repository and cache.
Gradleに関係するファイル群
以下のようなディレクトリ構成があったとします。
.
├── build.gradle
├── clients
│ ├── build.gradle
│ └── src
│ └── main
│ ├── kotlin...
├── contracts
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── kotlin
│ └── test
│ └── kotlin
├── gradle.properties
├── gradlew
├── gradlew.bat
├── repositories.gradle
├── settings.gradle
└── workflows
├── build.gradle
└── src
├── integrationTest
│ └── kotlin
│ └── com
├── main
│ └── kotlin
│ └── com
└── test
└── kotlin
└── com
build.gradle
上のディレクトリ構成で、"contracts", "workflows", "clients"ディレクトリ内にはそれぞれbuild.gradle
ファイルが存在しています。
Gradleでは複数のProject(subproject)を管理することができ、それぞれのProject
と対応するビルド手順やライブラリーを定義するのがbuild.gradle
です。
settings.gradle
Gradleは複数のプロジェクトをまとめて管理できます。全プロジェクトで共通する記述や、subprojectのディレクトリ指定を行います。
以下の記述では、"workflows", "contracts", "clients"のディレクトリがサブプロジェクトであることを指定しています。
include 'workflows'
include 'contracts'
include 'clients'
gradlew, gradlew.bat
gradle
コマンドは、gradlew(mac osなど) gradlew.bat(windows)
を経由して実行されます。gradlew
はgradleコマンドを適切なバージョンで実行するためのラッパーです。
gradlew
, gradlew.bat
が自動的にproject毎のバージョン管理をおこなってくれます。
Gradleに関係する設定ファイル
kotlin DSLとGroovy
build script
はGroovyかKotlinによって記述されます。
KotlinとGroovyの構文の簡単な違いを記述します。
// Groovy: 関数に()がない
url "http://...."
// Kotlin
url("http://....")
// Groovy: 名前引数は param: value 形式
apply plugin: "name of plugin"
// kotlin
apply(plugin = "name of plugin" )
// Groovy: プロパティーのセットと関数が同じ構文
version "1.1.0"
// Kotlin
val version = "1.1.0"f
Discussion