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

自定义渐变任务取决于插件

琴刚豪
2023-03-14

小结:我想写一个gradle任务,它依赖于一个插件。我特别想使用pluginorg。希德塔克。ssh用于我的部署任务

我有以下项目结构

build.gradle
settings.gradle
some-modules/
|-- src/...
buildSrc/
|-- src/
|-- |-- main/groovy/package/DeployTask
|-- build.gradle

在我的主要身材中。gradle我导入插件并定义任务:build。渐变

plugins {
    id 'idea'
    id 'org.hidetake.ssh' version '2.10.1'
}

...

remotes {
    dev {
        host = findProperty("server.dev.host")
        user = findProperty("server.dev.user")
        identity = file(findProperty("server.dev.identity_file") ?: "${System.properties['user.home']}/.ssh/id_rsa")
    }
}

import org.irrigation.gradle.DeployTask

task deploy(type: DeployTask) {
    description = "Deploys to Server"
}

buildSrc/src/main/package/DeployTask中,我定义了它:

class DeployTask extends DefaultTask {
    @Input
    @Option(option = "env", description = "Configures the environment to be used")
    String environment = "dev";

    @Input
    @Option(option = "branch", description = "Configures the branch which should be deployed")
    String branch = "master";

    @TaskAction
    void deploy() {
        ssh.run {
            session(ssh.remotes[environment]) {
                execute "echo test"
            }
        }
    }

}

我显然收到了错误信息:

Execution failed for task ':deploy'.
> Could not get unknown property 'ssh' for task ':deploy' of type org.irrigation.gradle.DeployTask.

问题是,我可以(但不想)在mainbuild中编写任务。渐变如下(无错误)

task deploy(type: DeployTask) {
    doLast {
        ssh.run {
            session(ssh.remotes[environment]) {
                execute "echo test"
            }
        }
    }
}

共有1个答案

令狐钧
2023-03-14

ssh已注册为项目的扩展:https://github.com/int128/gradle-ssh-plugin/blob/master/gradle-ssh-plugin/core/src/main/groovy/org/hidetake/gradle/ssh/plugin/SshPlugin.groovy#L20

所以你需要在你的任务中引用扩展,就像这样(未经测试):

@TaskAction
void deploy() {
    doLast {
        getProject().getExtensions().getByType(Service.class).run {

        }
    }
}
 类似资料:
  • 我有个小问题。 我创建了自定义gradle插件(独立插件),并将它从mavenlocal包含在我的简单项目中。它正在工作,但我不知道如何在我的插件中设置系统属性。更多细节:在我的插件中,在任务中,我想设置系统属性(system.setproperty(key,value))并从我的主应用程序中获取它的属性,例如在main类main方法中,但main方法不使用此属性 当我在构建中创建任务时。grad

  • 如何将属性传递给gradle自定义任务?在ant中,它将如下所示: 在格拉德尔怎么做? 属性名称和版本是必需的,用户需要将它们传递给任务。

  • 例如,我有一个插件:公共类PluginA实现plugin。 我会创建一个任务塔斯卡。现在我想设置:taska.dependson taskB,但是taskB是在pluginb中定义的。 有没有可能做到这一点,如果可以,如何做到?

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

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

  • 我创建了一个gradle插件(简称testinfra),它在编译时和运行时依赖于其他两个jar。这是我的版本。我的插件的gradle: 我能够将我的插件罐子推向人工制品。但是当我想使用插件时,我必须指定插件的GAV及其依赖项。见下文: 我的要求是避免指定依赖罐的GAV以及测试插件GAV。有没有办法在发布期间配置我的pom.xml(发布任务),这样当我指定插件的GAV时,gradle会识别依赖项并下