我有个任务
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中我不能将一些简单的代码移动到一个独立的方法中。
谢谢
1条答案
按热度按时间iyzzxitl1#
好吧,我知道怎么做了。关键部分是:
1>将公共代码放在一个扩展了Exec的新类中,这样我就可以访问“workingDir”之类的东西。
2>在这个新类中,将代码放在一个自定义方法中,这样我就可以将自定义类不可用的变量(如${buildDir})传递给它