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

独立的gradle插件可以导出自定义任务类型吗?

谢华彩
2023-03-14

我有一个独立的Gradle插件,其中包括一个自定义任务类型:

Gradle公约/build.gradle

plugins {
  id 'groovy-gradle-plugin'
  id 'maven-publish'
}

group = 'com.example'
version = '1.0'

publishing {
  repositories {
    maven {
      url = uri('/path/to/repo')
    }
  }
}

gradle公约/src/main/groovy/com.example.my-conventions.gradle

abstract class CustomTask extends DefaultTask {
    @TaskAction
    def hello() {
        println "hello"
    }
}

我可以从另一个项目中使用插件,但是如何注册CustomTask?大概是这样的:

项目/构建。格拉德尔

plugins {                                                                       
  id 'com.example.my-conventions' version '1.0'
}

// how do I reference CustomTask here?
tasks.register('myCustomTask', com.example.CustomTask) {
  // ...
}

是否可以从自定义插件导出自定义任务?或者我必须使用buildscript机制使用自定义任务吗?

共有1个答案

闾丘淇
2023-03-14

已检查gradle-conventions-1.0。jar,似乎自定义任务类属于默认包,因此我可以按如下方式注册任务:

项目/构建。格拉德尔

plugins {                                                                       
  id 'com.example.my-conventions' version '1.0'
}

tasks.register('myCustomTask', CustomTask) {
  // ...
}

但这只适用于com.example.my-conventions.gradle除了类本身之外还包含groovy代码,否则会出错:

An exception occurred applying plugin request [id: 'com.example.my-conventions', version: '1.0']
> Failed to apply plugin 'com.example.my-conventions'.
   > java.lang.ClassNotFoundException: precompiled_ComExampleMyConventions

这种方法避免了依赖buildscript机制(Gradle文档中不推荐这种机制)。

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

  • 问题内容: 我的公司最近写了gradle插件来进行原始配置(存储库,项目间的通用依赖关系等)。总体而言,这大大简化了我们的构建过程,并发现了项目之间的一些不一致之处。我们最近尝试向插件添加任务,但该任务无法正常工作。 这是坏掉的插件: 除了之外,此插件都很好用。当我将其添加到混合中(并编译/部署到我们的本地仓库)时,当我尝试构建使用插件的项目时出现此错误: 问题答案: 在脚本中定义任务时,将调用方

  • 试图了解如何创建自定义插件。但我无法完成我的新任务。我得到这个错误: 无法应用插件[id为“Code4Reference”] 更新:现在我面临另一个问题,当执行我的新任务,应该签署所有的RPM在路径上找到。我知道这在大楼里很好用。格拉德尔: 在libs.gradle.sign类型的任务“:MyTask”上找不到参数[libs.gradle.sign$_showmessage_closure1@4b

  • 你知道怎么了吗?为什么任务输出不包含在war文件中,而是包含在jar文件中?AFAIK我做了我该做的 定义任务的输出 将输出添加到资源 使任务在processResources任务之前执行

  • 基于该解决方案,以下工作起作用:

  • 我想写一个Gradle任务,在我所有的子项目中共享。此任务在调用它的子项目中查找所有其他类型为“GenerateMavenPom”的任务,并执行这些任务。 通过这样做,我的子项目可以定义他们想要的任何Maven发布,我可以使用“gradle GenerateMavenPomFiles”等单个任务执行gradle来创建pom.xml,而不需要知道每个子项目中的单个发布类型。为什么?因为Maven插件