[英]Executing dynamic gradle task with gradle 6
我们直接从 gradle 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', [])
}
}
使用 gradle 6,我们会收到此错误: > 找不到 arguments 的方法 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', [])
}
}
但这也不起作用。 任何指针都会很棒。 谢谢!
用法的味道是您创建了一个任务doCopy
,它调用了一个方法,该方法又创建了一个复制任务。 为什么不先简单地创建复制任务?
task doCopy(type: Copy) {
from 'resources'
into 'newResources'
}
在 Gradle 6.0 中,在 Gradle 完成评估您的项目后,您无法执行不属于任务图的任务。
如果您在项目中追求的是一种基于外部参数概括任务创建的方法,请查看任务规则。
由于 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"), [])
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.