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

gradle中的自定义任务/插件

糜单弓
2023-03-14

我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。

我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。

我的项目树如下所示:

/project
.
|-gradle
|-src
|---main
|-----groovy
|-----java
|-----resources
|---test
|-----groovy
|-----java
|-----resources
|-build.gradle

我试图做的是在src/main/groovy中创建我的任务/插件类,然后在构建中使用它们。渐变

让我举一个小例子。

src/main/groovy/mypackage/TestTask。groovy:

package org.gradle.mypackage

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

public class TestTask extends DefaultTask {

    @TaskAction
    def doAction() {

    }
}

build.gradle

plugins {
    id 'groovy'
}

sourceCompatibility = 1.7

repositories {
    mavenCentral()
}

dependencies {

    compile(
        localGroovy(),
        gradleApi()
    )

    testCompile(
        [ group: 'junit', name: 'junit', version: '4.11' ]
    )

}

task testTask(type: TestTask)

当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,我得到以下错误:

错误:(116,0)在根项目“project”上找不到属性“TestTask”。

我做错了什么?我试图导入构建中的任务。gradle使用导入mypackage。TestTask但这也不起作用。

在我看来,groovy文件根本不会编译,而根据我在文档中读到的内容,gradle应该负责编译并将它们添加到类路径中。

共有2个答案

屠和洽
2023-03-14

这不是它的工作方式。如果您需要提供自定义插件和包中组织的任务,请将整个代码放在build dSrc目录下。在$GRADLE_HOME/示例/MultiProjectBuildSrc下,您可以找到应该如何完成的出色示例。

$GRADLE\u HOME-GRADLE安装目录。

闻人嘉木
2023-03-14

给你:“堆栈溢出”解决方案。

在项目中创建文件夹build dSrc/src/main

别忘了创建构建。建筑中的渐变/

apply plugin: 'groovy'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

现在在主文件夹中创建包含任务的包,例如:pl.myAwesomeCompany。格拉德尔。任务

package pl.myAwesomeCompany.gradle.tasks

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.incremental.IncrementalTaskInputs

class ExampleTask extends DefaultTask {

    @TaskAction
    void execute(IncrementalTaskInputs inputs) {
        println inputs.incremental ? "CHANGED inputs considered out of date"
            : "ALL inputs considered out of date"
    }
}

瞧!现在,在您的项目中,您可以使用您的插件:

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

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

  • 我有一个自定义任务定义来运行每个测试具有特殊设置的特定测试文件。我的任务定义如下: 现在,此设置中的一些测试是不可靠的,我尝试再次运行它们,如下所示: 我编写了一个测试类,第一次总是失败,第二次总是成功: 不幸的是,测试只执行一次,整个测试套件失败。我可以使用中所述的自定义规则成功运行测试https://stackoverflow.com/a/55178053/6059889 有没有办法将测试重试

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

  • 我正在写一些gradle插件,现在我遇到了一个问题,DriverManager看不到buildscript依赖项中定义的JDBC驱动程序: 我有下一个build.gradle文件: 当我调用扩展DefaultTask的任务中定义的命令时