これらのページを見る:
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!
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
メッセージを標準出力だけのプラグインですが、これで完成です。