如何在gradle方法中使用workingDir和类似属性?

zpgglvta  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(167)

我有个任务

task buildDockerImageLocal(dependsOn: [build, copyDockerfile], type: Exec) {
    // ...
    workingDir "${buildDir}"
        // ....
}

但是我需要将大量代码移到一个公共方法中,因为它在类似的任务中是重复的,不,制定一个先决条件任务不是一个解决方案。所以我试了所有我能想到的方法,但都没用。例如:

def buildDockerImage(task, String environment) {
    //......
    task.workingDir "${buildDir}"
    //......
}

task buildDockerImageLocal(dependsOn: [build, copyDockerfile], type: Exec) {
    buildDockerImage(this, 'local')
}

将失败,并显示“无法找到用于参数的方法workingDir()”
这到底是怎么回事在每一种编程语言中,我都可以将代码移动到方法中,Gradle怎么会失败呢?我觉得Gradle显然在我背后做了什么,但我不知道是什么。我在谷歌上搜索了很多,问了ChatGPT,我仍然不明白为什么在Gradle中我不能将一些简单的代码移动到一个独立的方法中。
谢谢

iyzzxitl

iyzzxitl1#

好吧,我知道怎么做了。关键部分是:
1>将公共代码放在一个扩展了Exec的新类中,这样我就可以访问“workingDir”之类的东西。
2>在这个新类中,将代码放在一个自定义方法中,这样我就可以将自定义类不可用的变量(如${buildDir})传递给它

abstract class DockerBuildTask extends Exec {
    def doAction(String buildDirParam, String env) {
//.....
        def buildDir = buildDirParam
        workingDir = "${buildDir}"
        //.....
    }
}

task buildDockerImageLocal(dependsOn: [build, copyDockerfile], type: DockerBuildTask) {
    doAction("${buildDir}", "local")
}

相关问题