Gradle:从另一个插件添加插件依赖项

mrz*_*iak 4 groovy gradle gradle-plugin

我正在创建gradle自定义插件,我的一个任务需要确保另一个插件应用于同一个项目.因为它将在它之上运行.我希望我的插件的用户避免设置对另一个插件的显式依赖 - 我想在我的插件中进行.

所以,我希望应用此插件(https://plugins.gradle.org/plugin/org.hidetake.ssh).这是我的依赖.

我如何创建插件的方式 - 我只是在groovy上创建一个类代码,将它放在buildSrc\src\main\groovy中并在项目中应用groovy插件.所以我的自定义插件在构建阶段可以看到.它的工作原理,我为同一个项目做了很少的其他插件,所以现在好了.

我已经浏览了其他主题和谷歌相同的问题,但我不能让这项工作对我来说.这是我如何应用代码:

void apply(Project project) {

    project.buildscript {
      repositories {
        maven {
          url "https://plugins.gradle.org/m2/"
        }
      }
      dependencies {
        classpath "org.hidetake:gradle-ssh-plugin:1.1.3"
      }
    }

    project.apply plugin: "org.hidetake.ssh"
    ...
Run Code Online (Sandbox Code Playgroud)

我收到的错误消息:找不到ID为'org.hidetake.ssh'的插件.我试图通过gradle api也使用project.repositories.mavenCentral()和project.dependencies.add以及project.apply(插件:'org.hidetake.ssh')然后 - 也不起作用 - 同样的错误消息.试图在project.dependencies.add("myConfig",[group:'org.hidetake',名称:'gradle-ssh-plugin',版本:'1.1.3'])中使用长记法 - 没有结果.

感谢是否有人可以指导正确的语法\方式使其工作.

mrz*_*iak 7

好的,最后我明白了.要解决此问题,您需要执行以下操作:

  1. 将build.gradle放在buildSrc目录中.
  2. 声明插件的依赖关系作为运行时.像这样:

    repositories {
        jcenter()
    }
    dependencies {
        runtime 'org.hidetake:gradle-ssh-plugin:2.6.0'
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在您自己的插件定义中明确应用插件.像这样:

    void apply(Project project) {
        project.pluginManager.apply('org.hidetake.ssh')
    ...
    
    Run Code Online (Sandbox Code Playgroud)