背景
Gradleのbuild.gradle
には様々な記法があります。その中でもbuildscript
とplugins
の違いがわからなかったので調べてみました。
build.gradle
の記述言語はGroovyを使用しますが、Kotlinでも本質は同じです。
buildscript
buildscript
ではbuild.gradle
の中で使用するプラグインなどを指定します。
- 社内でリポジトリを運用していて、そこでGradleプラグインを管理しているような場合は
repository
の中に追記します。 -
dependancies
にはbuild.gradle
の中で使いたいプラグインのclasspathを指定します。 - ここで指定するのはあくまで
build.gradle
の中で使いたいプラグインを指定するのであって、アプリケーション内で使いたいライブラリ (たとえばAWS SDKなど)はここに書きません。 -
dependancies
に追加したプラグインはapply plugin
で適用します。プラグインでないライブラリの場合はこれは不要です。
buildscript {
repositories {
gradlePluginPortal()
mavenCentral()
maven {
url 'https://my-internal-repository.example.com/'
}
}
dependencies {
classpath "org.jlleitschuh.gradle:ktlint-gradle:12.1.1"
}
}
apply plugin: "org.jlleitschuh.gradle.ktlint"
dependancies
に書くclasspath
とapply plugin
の記法は異なります。考えてもよくわからないので使用したいライブラリがある場合はGradle Plugin Portalで検索してコピペしましょう。
plugins
plugins
も同様にbuild.gradle
の中で使いたいプラグインを指定します。
- リポジトリの設定などはありません。
- 使いたいプラグインとそのバージョンを指定します。プラグインでないものは指定できません。
- Core Pluginに指定されているものは省略記法が使えます。
plugins {
id 'java'
id "org.jlleitschuh.gradle.ktlint" version "12.1.1"
}
で、どっち使うの?
plugins
を使うことが推奨されています。
plugins
は簡潔でわかりやすいですが、buildscript
はやや冗長です。また、リファレンスではbuildscript
はレガシーとされていますので積極的には使わないほうがよいでしょう。
ただ、見てわかるようにplugins
の方にはrepositories
の設定がありません。
実はデフォルトではplugins
はCore PluginかGradle Plugin Portalにあるプラグインしか指定できません。つまり、これらで管理されていないプラグインを使用できないわけです。
そのような場合はbuildscript
を使うのも手でしょう。
もし、どうしてもplugins
を使いつつ、独自のリポジトリのプラグインも使いたい場合はsettings.gradle
にpluginManagement
のブロックを作成してリポジトリを指定します。このあたりの説明は下記の記事などを参照してください。