くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Gradle Custom Task with kotlin を実行するときに 引数を渡したり実行結果を読み取る。

Gradle Task に引数を渡す

Gradle Task を実行するときに引数を渡したいときがあると思います。
build.gradle内で完結している場合には、以下のように lateinit var な変数を定義すれば値を渡すことができます。

lateinit var userName: String

さて、build.gradle.kts 内に留まらず、terminal等から呼び出すときにはどうすればいいでしょうか。

まぁ、結果から言うと以下のように設定すればいけます。 プロパティを定義してそこにオプションであることを明示してあげるといける。

@Suppress("UnstableApiUsage")
    @set:Option(option = "userAge", description = "this is stand for user age")
    @get:Input
    lateinit var age: String

Gradle Task の実行結果を読み取る

同じプログラム内から呼び出してるときはシュッとできますが、ここで書くのは外部から呼び出すときです。

具体的には、terminal から Gradle Custom task を呼び出すときに値を返したい的な。

結論からいくと プログラム内から標準出力して表示してシェル芸なりなんなりしてよしなに処理すればいける。

プログラム全体像

SampllteTask.kt

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.options.Option

open class SampleTask : DefaultTask() {

    lateinit var userName: String

    @Suppress("UnstableApiUsage")
    @set:Option(option = "userAge", description = "this is stand for user age")
    @get:Input
    lateinit var age: String

    @TaskAction
    fun print() {
        print("Hello ${userName} your ${age} yeard-old")
    }
}

build.gradle

task sample(type: SampleTask) {
    userName = "kuu"
}

出力例

./gradlew sample --userAge="21"  -q
Hello kuu your 21 yeard-old⏎