gradle - 如何创建和使用 gradle 任务工厂函数
问题描述
我如何创建一个创建函数的函数,或者我应该要求调用它
// cant use this method see comment tagged ERROR further down
def webRollbackFactory(parentTask) {
tasks.create(name: "webRollback.${parentTask.name}", type: Copy, dependsOn: [webBackup]) {
onlyIf { patentTask.state.failure != null }
from(zipTree("${webPublishPath}/../${getWebBackupName()}")) { include '*' }
into webPublishPath
doLast {
println "\nwebRollback.${parentTask.name}.doLast"
}
}
}
// this task which do the same works with out problems
task webRollback_webPublish(type: Copy) {
onlyIf { webPublish.state.failure != null }
from(zipTree("${webPublishPath}/../${getWebBackupName()}")) { include '*' }
into webPublishPath
doLast {
println "\nwebRollback.webPublish.doLast"
}
}
task webPublish(type: com.ullink.Msbuild) {
dependsOn msbuild, webBackup
projectFile = "${webPublishProjectDir}/${webPublishProjectFileName}"
targets = ['Publish']
parameters = [PublishProfile: webPublishProfile]
configuration = BUILD_TYPE
parameters.maxcpucount
doLast {
println '\nwebPublish.doLast'
}
// ERROR: fails with: Could not find method webRollbackFactoy() for arguments [task ':webAccessTest'] on task ':webAccessTest' of type org.gradle.api.tasks.Exec.
//finalizedBy webRollbackFactory(webPublish)
// the version that works
finalizedBy webRollback_webPublish
}
我在 Gradle 4.8
解决方案
你得到这个错误的原因是因为被评估的闭包没有找到在主文件中声明的函数。
尝试将您的函数更改为闭包作为变量引用,然后它应该可以工作。
webRollbackFactory = { parentTask ->
tasks.create(name: "webRollback.${parentTask.name}", type: Copy, dependsOn: [webBackup]) {
onlyIf { patentTask.state.failure != null }
from(zipTree("${webPublishPath}/../${getWebBackupName()}")) { include '*' }
into webPublishPath
doLast {
println "\nwebRollback.${parentTask.name}.doLast"
}
}
}
推荐阅读
- huggingface-transformers - “Add and Norm”如何在 Transformer 中的 Position-wise 前馈层中工作?
- python - 训练 DGL 图神经网络以模拟广度优先搜索
- javascript - Bootstrap 5 - 页面加载时打开模式
- hyperledger-explorer - 如何更改 Hyperledger/explorer 主页?
- c# - 如何使用 OdbcConnection 读取 CSV 文件?
- javascript - 试图获取我的机器人所在的所有服务器
- sql-server - 无效的对象名称“dbo.PolyinstantiationExample”
- ionic-framework - Android中的电容器本地通知不显示附件图像
- php - 为什么 PHP 标头从不进入正文?
- c++ - 给 Eigen::Map 输出自己的存储空间?