繁体   English   中英

使用 gradle 6 执行动态 gradle 任务

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM