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

7
我正在创建gradle自定义插件,我的其中一个任务需要确保同一项目应用了另一个插件,因为它将在其之上操作。 我希望我的插件用户避免对另一个插件设置显式依赖关系 - 我想在我的插件内部完成这个操作。
所以,我想要应用这个插件(https://plugins.gradle.org/plugin/org.hidetake.ssh)。这是我的依赖项。
我创建插件的方式是 - 我只需在groovy中创建一个类代码,将其放入buildSrc\src\main\groovy中,并在项目中应用groovy插件。因此,我的自定义插件在构建阶段对gradle可见。它可以工作,我已经用同样的方式为同一项目完成了几个其他插件,所以现在还好。
我已经查看了其他主题和谷歌搜索相同的问题,但我无法使其对我起作用。这是我应用代码的方法:
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"
    ...

我收到的错误信息是:找不到 ID 为 'org.hidetake.ssh' 的插件。 我尝试使用 gradle API 进行操作,同时使用 project.repositories.mavenCentral()、project.dependencies.add 和 project.apply(plugin:'org.hidetake.ssh') 等方法,但都无法解决问题,仍然出现相同的错误信息。我还尝试使用长符号表示法在 project.dependencies.add("myConfig",[group:'org.hidetake', name:'gradle-ssh-plugin', version:'1.1.3']) 中添加依赖项,但没有任何结果。 如果有人能够指导正确的语法/方法使其正常工作,将不胜感激。
1个回答

12

好的,最终我明白了。要解决这个问题,你需要按照以下步骤操作:

  1. 将 build.gradle 放置在 buildSrc 目录中。
  2. 将插件声明为 runtime 依赖。就像这样:

    repositories {
        jcenter()
    }
    dependencies {
        runtime 'org.hidetake:gradle-ssh-plugin:2.6.0'
    }
    
  3. 在您自己的插件定义中明确地应用插件。如下所示:

    void apply(Project project) {
        project.pluginManager.apply('org.hidetake.ssh')
    ...
    

这个很好用。我正在使用它在所有我的项目上应用'com.github.ben-manes:gradle-versions-plugin:0.17.0'(它们都使用一个共同的基础插件来处理其他依赖项和任务)以进行自动化依赖项更新检查。非常感谢! - François POYER

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接