2016-09-14 142 views
3

我正在创建gradle自定义插件,我的一个任务需要确保另一个插件应用于同一个项目。因为它将在其上运行。 我希望我的插件用户避免为另一个插件设置明确的依赖关系 - 我想在插件内部执行此操作。Gradle:从另一个插件添加插件依赖项

所以,我想要这个插件(https://plugins.gradle.org/plugin/org.hidetake.ssh)应用。这是我的依赖。

如何创建插件的方式 - 我只是时髦创建一个类的代码,把它放在buildSrc的\ src \主\ Groovy和项目申请Groovy插件。所以我的自定义插件可以在build阶段看到。它的工作原理是,我为同一个项目完成了其他几个插件,所以现在没问题。

我已经看过其他话题和谷歌同一个问题,但我不能让这个工作给我。这怎么我申请代码:

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',name:'gradle-ssh-plugin',版本:'1.1.3'])中使用长符号 - 没有结果。

欣赏是否有人可以引导正确的语法\使其工作的方式。

回答

2

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

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

    repositories { 
        jcenter() 
    } 
    dependencies { 
        runtime 'org.hidetake:gradle-ssh-plugin:2.6.0' 
    } 
    
  3. 应用在自己的插件定义明确的插件。就像这样:

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

这个伟大的工程。我正在使用它在我的所有项目上应用'com.github.ben-manes:gradle-versions-plugin:0.17.0'(它们都使用公共基本插件用于其他依赖关系和任务),以实现自动依赖关系更新检查。非常感谢! –