Home About Contact
Gradle

Gradle のPlugin を書く Precompiled Script Plugins

これらのページを見る:

Understanding Plugins の説明にしたがってコードを書いていくと、Script Plugins は問題なかったのだが、 Precompiled script plugins で詰まったのでメモを残します。

環境

Java, Gradle のそれぞれの Version 確認:

$ java -version
openjdk version "17.0.13" 2024-10-15

$ gradle --version
Welcome to Gradle 8.12!

Precompiled script plugin

gradle init でベースとなるコードの生成は不要です。

まず hello タスクを持つ Precompiled な script plugin を書くの hello ディレクトリを作成して、そこへ移動:

$ mkdir hello
$ cd hello

説明にしたがって buildSrc/src/main/kotlin/GreetingPlugin.gradle.kts を作成:

$ mkdir -p buildSrc/src/main/kotlin
$ touch buildSrc/src/main/kotlin/GreetingPlugin.gradle.kts

内容は https://docs.gradle.org/current/userguide/custom_plugins.html#sec:precompile_script_plugin の通りですが、一応ここにも転記:

tasks.register("hello") {
    doLast {
        println("Hello from the convention GreetingPlugin")
    }
}

そして、buildSrc/build.gradle.kts を用意します。

上記ページではこの説明がないのでわからなくなった。
ただし、Writing Plugins の方には説明があるにはある。

$ touch buildSrc/build.gradle.kts

コードは次のようにします:

plugins {
    `kotlin-dsl`
}

repositories {
    gradlePluginPortal()
}

gradlePluginPortal の代わりに 次のようにしてもうまくいきました。

plugins {
    `kotlin-dsl`
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib:2.0.21")
}

レポジトリ指定を mavenCentral() ではなく gradlePluginPortal() にすれば 依存の記述しなくてもそれを解決してくれるらしい。

これで Precompiled script plugin は完成です。

あとはこのプラグインを使うために プロジェクトルートに build.gradle.kts を作成:

$ touch build.gradle.kts

内容は次のようにします:

plugins {
    application
    id("GreetingPlugin")
}

この段階でこの hello プロジェクトの全体像を確認:

.
├── build.gradle.kts
└── buildSrc
    ├── build.gradle.kts
    └── src
        └── main
            └── kotlin
                └── GreetingPlugin.gradle.kts

これで hello タスクを実行:

$ gradle -q hello
Hello from the convention GreetingPlugin

メッセージを標準出力だけのプラグインですが、これで完成です。