首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用6级执行动态分级任务

用6级执行动态分级任务
EN

Stack Overflow用户
提问于 2019-11-19 12:35:46
回答 2查看 448关注 0票数 1

我们直接从第4级转移到第6级。在我们的一个方法中,我们创建了一个任务并在前面执行它。

代码语言:javascript
复制
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执行它:

代码语言:javascript
复制
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', [])
    }
}

但这也没用。任何指示都会很棒的。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-20 20:46:38

从方法中调用任务是不可能的,因为execute()方法已被删除。最后,我们编写了java代码来复制内容,而不是使用复制任务。

代码语言:javascript
复制
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"), [])
}
票数 0
EN

Stack Overflow用户

发布于 2019-11-20 19:48:54

使用气味是创建一个任务,doCopy,它调用一个方法,该方法反过来创建一个复制任务。为什么不先创建一个复制任务呢?

代码语言:javascript
复制
task doCopy(type: Copy) {
    from 'resources'
    into 'newResources'
}

在Gradle 6.0中,在Gradle完成项目评估后,不能执行不属于任务图的任务。

如果您在项目中所追求的是一种基于外部参数来概括任务创建的方法,那么请看一下任务规则

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58934283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档