当前位置:  开发笔记 > 编程语言 > 正文

在Gradle中的自定义任务中运行任务

如何解决《在Gradle中的自定义任务中运行任务》经验,为你挑选了1个好方法。

我正在尝试使用Java编写自定义Gradle插件.我需要在此插件中执行的操作之一是将所有已定义的依赖项复制到文件夹中.我已经了解了如何使用build.gradle文件中的任务执行此操作:

task copyDeps(type: Copy) {
    from configurations.runtime
    into 'build/lib'
}

但是,我正在努力弄清楚如何从我自己的自定义任务中运行此任务.我试过这样做:

public class MyTask extends DefaultTask {

    @TaskAction
    public void executeTask() {
        Copy copyTask = new Copy();
        copyTask.into(libFolder).from(getProject().getConfigurations().getByName("runtime").execute();
    }
}

但是,当我运行这个时,我得到了异常:

Task of type 'org.gradle.api.tasks.Copy' has been instantiated directly which is not supported. Tasks can only be created using the DSL.

我理解它想说的是什么,但是我无法发现我能够在Java中使用DSL执行此任务.



1> Rene Groesch..:

您无法在Gradle中的任务中创建任务.如果你想用你所描述的任务编写一个自定义插件,那么就要编写一个自定义插件类,并在该插件类中声明一个类型的任务,Copy它可以完成你想做的事情.这看起来像这样:

class MyCustomPlugin extends Plugin {

    void apply(Project project) {
        project.tasks.create("copyDeps", Copy.class) {
            from configurations.runtime
            into 'build/lib'
        }
    }

}

现在,如果您在您的buildscript中应用此插件:

apply plugin:MyCustomPlugin

你自动Copy在你的构建中有一个名为"copyDeps"的任务.

还有一件事:

有时,在自定义任务中执行简单的复制操作会很方便.这可以使用project.copyutil方法完成.像这样的任务看起来像这样

public class MyTask extends DefaultTask {

    @TaskAction
    public void executeTask() {
        project.copy {
            into(libFolder)
            from(project.configurations.runtime)
        }
    }
}

使用普通的java,它看起来像这样:

public class MyTask extends DefaultTask {

    @TaskAction
    public void executeTask() {
        project.copy(new Action() {
            @Override
            void execute(CopySpec copySpec) {
                copySpec.into(libFolder);
                copySpec.from(getProject().getConfigurations().getByName("runtime"));
            }
        });

    }
}

最后一件事:

你永远不应该打电话Task#execute()给自己.此方法被认为是Gradle中的内部API,并且直接执行它会导致意外行为.(例如,它打破了Gradles的增量构建功能)

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有