背景
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のブロックを作成してリポジトリを指定します。このあたりの説明は下記の記事などを参照してください。