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

布赖恩·迪卡萨

我正在尝试使用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执行此任务的方法。

雷内·格罗施克

您无法在Gradle中的任务内创建任务。如果您要使用任务描述编写自定义插件,那么方法是编写自定义插件类,并在该插件类中声明一个可以完成Copy您想做的类型的任务可能看起来像这样:

class MyCustomPlugin extends Plugin<Project> {

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

}

现在,如果您在构建脚本中应用此插件:

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<CopySpec>() {
            @Override
            void execute(CopySpec copySpec) {
                copySpec.into(libFolder);
                copySpec.from(getProject().getConfigurations().getByName("runtime"));
            }
        });

    }
}

最后一件事:

您永远不要Task#execute()自己打电话该方法在Gradle中被视为内部API,直接执行该方法会导致意外行为。(例如,它破坏了Gradles的增量构建功能)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从自定义任务中调用MSBuild任务

来自分类Dev

如何获得自定义的Rake任务以在Sinatra中运行?

来自分类Dev

使用build.sbt中的参数为子项目自定义运行任务?

来自分类Dev

Gradle Javadoc自定义任务

来自分类Dev

自定义gradle任务中的注释继承

来自分类Dev

Gradle中的自定义任务/插件

来自分类Dev

如何在.NET中自定义任务计划?

来自分类Dev

如何使用不同的pluginClasspath在Gradle中配置自定义findbugs任务

来自分类Dev

自定义任务无法运行

来自分类Dev

Gradle在自定义任务中执行命令行

来自分类Dev

如何在sbt中实现自定义监视任务?

来自分类Dev

在自定义任务中执行Gradle构建任务

来自分类Dev

从自定义任务中调用MSBuild任务

来自分类Dev

在NopCommerce中创建自定义任务

来自分类Dev

从自定义任务中调用grunt插件

来自分类Dev

Gradle Javadoc自定义任务

来自分类Dev

自定义gradle任务中的注释继承

来自分类Dev

Gradle中的“自定义任务”和“增强任务”概念有什么区别?

来自分类Dev

在Adobe CQ中创建自定义任务计划程序

来自分类Dev

自定义战争任务并在Gradle中应用自定义资源

来自分类Dev

Gradle中的自定义任务/插件

来自分类Dev

在长时间运行的任务中显示自定义对话框窗口

来自分类Dev

在Windows的任务栏中显示自定义标签?

来自分类Dev

Gradle Protobuf自定义任务

来自分类Dev

如何在sbt中实现自定义监视任务?

来自分类Dev

如何在自定义WAR任务中强制Gradle覆盖资源文件?

来自分类Dev

使用自定义类路径在Gradle任务中运行Java类

来自分类Dev

如何仅列出 Gradle 构建文件中的自定义任务?

来自分类Dev

在自定义 gradle 插件中,如何添加任务取决于其他插件中定义的任务?

Related 相关文章

  1. 1

    从自定义任务中调用MSBuild任务

  2. 2

    如何获得自定义的Rake任务以在Sinatra中运行?

  3. 3

    使用build.sbt中的参数为子项目自定义运行任务?

  4. 4

    Gradle Javadoc自定义任务

  5. 5

    自定义gradle任务中的注释继承

  6. 6

    Gradle中的自定义任务/插件

  7. 7

    如何在.NET中自定义任务计划?

  8. 8

    如何使用不同的pluginClasspath在Gradle中配置自定义findbugs任务

  9. 9

    自定义任务无法运行

  10. 10

    Gradle在自定义任务中执行命令行

  11. 11

    如何在sbt中实现自定义监视任务?

  12. 12

    在自定义任务中执行Gradle构建任务

  13. 13

    从自定义任务中调用MSBuild任务

  14. 14

    在NopCommerce中创建自定义任务

  15. 15

    从自定义任务中调用grunt插件

  16. 16

    Gradle Javadoc自定义任务

  17. 17

    自定义gradle任务中的注释继承

  18. 18

    Gradle中的“自定义任务”和“增强任务”概念有什么区别?

  19. 19

    在Adobe CQ中创建自定义任务计划程序

  20. 20

    自定义战争任务并在Gradle中应用自定义资源

  21. 21

    Gradle中的自定义任务/插件

  22. 22

    在长时间运行的任务中显示自定义对话框窗口

  23. 23

    在Windows的任务栏中显示自定义标签?

  24. 24

    Gradle Protobuf自定义任务

  25. 25

    如何在sbt中实现自定义监视任务?

  26. 26

    如何在自定义WAR任务中强制Gradle覆盖资源文件?

  27. 27

    使用自定义类路径在Gradle任务中运行Java类

  28. 28

    如何仅列出 Gradle 构建文件中的自定义任务?

  29. 29

    在自定义 gradle 插件中,如何添加任务取决于其他插件中定义的任务?

热门标签

归档