Gradle自定义任务(带输入)

mwg9r5ms  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(246)

我必须在Kotlin中创建一个gradle自定义任务,并使用不同的参数作为输入。因此,基于参数,自定义任务应该运行其他任务。
例如:我想跑步:

./gradlew ci type=release distribution=true version=1.2.2

./gradlew ci type=debug distribution=true version=1.2.2

此命令应运行任务:cleanassembleRelease***或***assembleDebug(根据类型参数),如果 distribute 参数为true,则还有另一个散发成品的工作(已经有这个成品)。
问题1:是否有任何方法可以创建一个自定义任务来运行基于外部参数的其他任务?
问题2:有没有办法注入参数?(我认为上面的命令无效)

khbbv19g

khbbv19g1#

您可以使用-P命令传递属性,下面是一个示例。

task passP() {
    if (customProp.equals("myProp")) {
        println customProp
    }
}

只有执行以下命令Gradle -PcustomProp=myProp passP时才能打印
现在,您可以传递参数,您可以根据传递的参数进行清理、assembleRelease或assembleDebug。
你有两种方法可以做到这一点.
先道:
创建一个gradle自定义任务来执行另一个gradle命令,这些命令看起来并不整洁。但代码看起来会像这样

task passP(type: Exec) {
    commandLine("cmd", "/c")
    if (customProp.equals("clean")) {
        args "gradle clean"
    }
}

如果您将clean作为参数传递,这将执行正常清理。
第二个道:
您将使用finializeBy关键字
您可以根据传递的参数调用这3个任务。
代码如下所示(未测试):

task passP() {
    if (customProp.equals("clean")) {
        tasks.named("clean") { finalizedBy("passP") }
    if (customProp.equals("debug")) {
        tasks.named("assembleDebug ") { finalizedBy("passP") }
    }
}

第一种方式工作100%,但我不确定第二种,因为我只习惯于使用finalizedBy的自定义任务范围外。

相关问题