我们直接从第4级转移到第6级。在我们的一个方法中,我们创建了一个任务并在前面执行它。
def myCopy(src, dest, rules) {
//check some biz logic with rules
Copy cc = task("cc${dest}",type:Copy)
cc.from src
cc.into dest
//this worked in gradle 4. With gradle 6 it throws an error:Could not find method execute() for arguments
cc.execute()
}
task doCopy {
doLast {
myCopy('resources', 'newResources', [])
}
}对于第6级,我们得到了以下错误:>无法找到参数的方法execute()。
我们知道execute已经被删除,所以我们尝试用finalizedBy执行它:
task noop {
doLast {
println "Noop..."
}
}
def myCopy(src, dest, rules) {
//check some biz logic with rules
Copy cc = task("cc${dest}",type:Copy)
cc.from src
cc.into dest
//this worked in gradle 4. With gradle 6 it throws an error:Could not find method execute() for arguments
tasks.getByName("noop").finalizedBy "cc${dest}"
}
task doCopy {
doLast {
myCopy('resources', 'newResources', [])
}
}但这也没用。任何指示都会很棒的。谢谢!
发布于 2019-11-20 20:46:38
从方法中调用任务是不可能的,因为execute()方法已被删除。最后,我们编写了java代码来复制内容,而不是使用复制任务。
def myCopy(sourceFolder, destinationFolder, rules){
//check some biz logic with rules
if (sourceFolder.isDirectory()) {
if (!destinationFolder.exists()) {
destinationFolder.mkdir();
}
String[] files = sourceFolder.list();
for (String file : files) {
File srcFile = new File(sourceFolder, file);
File destFile = new File(destinationFolder, file);
myCopy(srcFile, destFile, rules);
}
}
else {
Files.copy(sourceFolder.toPath(), destinationFolder.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
}
task doCopy {
myCopy(new File("./src/sub/"), new File("./newSrc2"), [])
}发布于 2019-11-20 19:48:54
使用气味是创建一个任务,doCopy,它调用一个方法,该方法反过来创建一个复制任务。为什么不先创建一个复制任务呢?
task doCopy(type: Copy) {
from 'resources'
into 'newResources'
}在Gradle 6.0中,在Gradle完成项目评估后,不能执行不属于任务图的任务。
如果您在项目中所追求的是一种基于外部参数来概括任务创建的方法,那么请看一下任务规则。
https://stackoverflow.com/questions/58934283
复制相似问题