2015-02-18 8 views
18

Я использую сторонний плагин Gradle в большом количестве проектов и хотел бы постоянно добавлять этот плагин к установке моего градиента. В настоящее время мне нужно добавить плагин для каждого build.gradle так:Постоянно добавьте плагин в Gradle

buildscript { 
    repositories { 
    jcenter() 
    } 
    dependencies { 
    classpath "com.github.dcendents:android-maven-plugin:1.2" 
    } 
} 

Есть ли способ, чтобы добавить этот плагин для моей установки Gradle, так что мне не нужно, чтобы включить его в каждом файле сборки?

Я действительно понимаю, что это не лучшая практика и может привести к невоспроизводимым сборкам.

+0

Возможный дубликат [Global Plugins in Gradle] (http://stackoverflow.com/questions/11567786/global-plugins-in-gradle) –

+0

@saberduck, возможно, не уверен. выполняет 'buildscript {' работает в 'init.gradle'? – introex

+0

Я никогда не пробовал, но я не вижу причины, почему не –

ответ

4

Это хак, а не решение

Вот теперь обновленная версия, которая также может применить плагин и добавить репозитории Maven. Тест с градиентом 2.10.

Добавить этот плагин для вашего .gradle/init.gradle:

apply plugin:AddDepPlugin 

class AddDepPlugin implements Plugin<Gradle> { 
    def addDeps = [ 
     "org.ensime.gradle": "gradle.plugin.net.coacoas.gradle:ensime-gradle:0.2.2", 
     "com.github.dcendents.android-maven": "com.github.dcendents:android-maven-plugin:1.2"] 
    def addRepos = ["https://plugins.gradle.org/m2/"] 
    void apply(Gradle gradle) { 
     def add = 0 
     gradle.allprojects { project -> 
      plugins.whenPluginAdded { t -> 
       if (++add == 1) { 
        project.getBuildScriptSource() 
        def bs = project.getBuildscript() 
        bs.getDependencies() 
        def repo = bs.getRepositories() 
        def ccf = bs.class.getDeclaredField("classpathConfiguration") 
        ccf.setAccessible(true) 
        def cc = ccf.get(bs) 
        addDeps.each { k,v-> cc.dependencies.add(project.dependencies.create(v))} 
        addRepos.each { k-> repo.maven { -> setUrl(k) } } 
       } 
       if (add == 8) 
        addDeps.each { k,v -> 
         if (!k.startsWith("x")) project.apply([plugin: k]) 
        } 
      } 
     } 
    } 
} 
+0

Я попытался использовать это, чтобы добавить плагин ensime gradle, но он дает: «Task« ensime »не найден в корневом проекте« shared-scala »». –

+0

добавление и применение отличается - я обновил фрагмент – bebbo

+0

Что делает раздел 'add == 8'? – RaGe

1

На http://ensime.github.io//build_tools/gradle/ я нашел альтернативное решение (это для ENSIME плагин):

apply plugin: AddEnsimePlugin 

class AddEnsimePlugin implements Plugin<Gradle> { 
    def supportedPlugins = [ 
    'org.gradle.api.plugins.JavaPlugin', 
    'org.gradle.api.plugins.ScalaPlugin', 
    'jp.leafytree.gradle.AndroidScalaPlugin' 
    ] 

    void apply(Gradle gradle) { 
    def added = false 

    gradle.allprojects { project -> 
     project.with { 
     if (parent == null) { 
      buildscript { 
      repositories { 
       jcenter() 
       maven { 
       name 'JFrog OSS Snapshot Repository' 
       url 'http://oss.jfrog.org/oss-snapshot-local' 
       } 
      } 
      dependencies { 
       classpath 'net.coacoas.gradle:ensime-gradle:0.2.6' 
      } 
      } 
     } 

     plugins.whenPluginAdded { plugin -> 
      if (!added && supportedPlugins.contains(plugin.class.name)) { 
      rootProject.apply plugin: 'org.ensime.gradle' 
      added = true 
      } 
     } 
     } 
    } 
    } 
} 

Это работает для меня с Gradle 2.12. Другой ответ также работает для меня.

Смежные вопросы