当前位置: 首页 > 知识库问答 >
问题:

自定义插件中的默认操作

宗政学
2023-03-14

我在使用Gradle api的Gradle自定义插件中工作,需要设置一个始终执行的操作,比如配置任务。

我以这种方式创建了一些任务:

class MyTask extends DefaultTask {
    @TaskAction
    void myAction() throws Exception {
        [my action code]
    }
}

然后添加到项目中:

class MyPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        project.getTasks().create("myTask", MyTask.class)
    }
}

...这些工作原理是:当我显式调用myWork目标时,它会被执行,但是我需要一个每次都被执行的任务,即使没有显式调用

共有2个答案

阴礼骞
2023-03-14

我终于找到了方法:

这个想法是将我的动作配置为配置。我想有几种方法,但我喜欢这一种:

class MyPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {

        final MyTask myTask = project.getTasks().create(
                "myTask", MyTask.class
        )

        project.getConfigurations().create(
                "myTask",
                {
                    myTask.myMethod()
                }
        )
    }
}
柯唯
2023-03-14

如果想在grable每次运行时都执行代码,可以直接将代码添加到apply方法中,或在块afterEvaluate中:

class MyPlugin implements Plugin<Project> {
  @Override
  void apply(Project project) {
    project.getTasks().create("myTask", MyTask.class)
    // your code...
    // or
    project.afterEvaluate(proj -> {
      // your code...
    });
  }
}

如果你需要在task中专门编写代码,那么你应该让你的任务dependsOn成为一个现有的任务(该任务已经在DAG-有向无环图中注册)。例如:

MyTask task = Tproject.getTasks().create("myTask", MyTask.class);
project.getTasks().findByName("assembleDebug").dependsOn(task);

关于dependsOn你可以在文档和这个答案中看到。

弃用:

此外,在旧版本的Gradle中,您可以执行your Task.execute(),但现在不建议使用。

 类似资料:
  • 我在IntelliJ中为setter创建了一个自定义模板。当我使用Alt Insert时,我可以选择该模板,而且效果很好。 但是,当我尝试按Alt-Enter生成缺少的setter时,它使用IntelliJ默认值。 如何使Alt Enter完成使用我的自定义模板而不是默认?

  • 问题: NSIS 中,自定义页面中,有一个 勾选框 和 一个 目录选择编辑框,能否实现勾选 CheckBox 后,目录选择编辑框 可用,如果不勾选,目录选择编辑框 变为不可用。 回答: 问题涉及到 NSIS 中自定义页面中的关于控件的消息传递问题,还有怎样进入回调函数处理的问题。 关于自定义页面的预先声明格式: Page custom [创建函数] [离开函数] [标题] 这里解释一下,关于自定义

  • 我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,

  • 问题内容: 如果我正确理解Java Networking and Proxies ,则该文件包含默认值,这些默认值在运行时填充到系统属性中。我的文件包含以下内容: 但是,当我在Eclipse 4.5中运行Java应用程序时,会返回。 我尚未在应用程序中的任何地方定义或覆盖此值。 我如何在运行时检索in 的值? 问题答案: 该文件未加载到系统属性()中。 通过或在命令行上手动设置代理(例如使用语法)

  • 有没有办法配置默认消息 或 在上面的示例中,

  • 有没有办法重新调整默认条带结帐的电子邮件宽度和其他字段... https://stripe.com/docs/checkout#集成-自定义 例如: 可以添加width属性来自定义嵌入在stripe窗体中的任意控件?