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

时间:2016-09-14 14:49:24

标签: gradle groovy 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"
    ...

我收到的错误消息:找不到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'])中使用长记法 - 没有结果。

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

1 个答案:

答案 0 :(得分:6)

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

  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')
    ...