2015-02-18 16 views
18

ich ein Drittanbieter Gradle Plugin in vielen Projekten verwenden und würde dieses Plugin wie dauerhaft meine gradle Installation hinzuzufügen. Zur Zeit muß ich das Plugin zu jedem build.gradle hinzufügen wie folgt:dauerhaft ein Plugin Gradle hinzufügen

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

Gibt es eine Möglichkeit, dieses Plugin meine Gradle Installation hinzuzufügen, so dass ich es in jeder Build-Datei nicht enthalten müssen?

Ich weiß, es ist nicht die beste Praxis sein könnte und kann dazu führen, unreproducible baut.

+0

möglich Duplikat von [Globale Plugins in Gradle] (http://StackOverflow.com/Questions/11567786/Global-Plugins-in-Gradle) –

+0

@saberduck vielleicht, nicht sicher. tut 'Buildscript {' Arbeit in 'init.gradle'? – introex

+0

Ich habe nie versucht es, aber ich habe keinen Grund, warum nicht –

Antwort

4

Dies ist ein Hack und keine Lösung

Hier ist nun eine aktualisierte Version, die auch in der Lage ist Plugins anzuwenden und Maven-Repositories hinzufügen. Getestet mit Gradle 2.10.

Dieses Plugin zu Ihrem .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

Ich versuchte dies das ensime gradle Plugin hinzufügen verwenden, aber es gibt: „Aufgabe‚ensime‘nicht in Stammprojekt‚Shared-scala‘gefunden“ –

+0

Hinzufügen und anwenden ist anders - ich das Snippet aktualisiert – bebbo

+0

Was bedeutet das '== 8' Abschnitt do? – RaGe

1

Auf http://ensime.github.io//build_tools/gradle/ ich diese alternative Lösung gefunden (dies ist für das ENSIME Plugin):

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 
      } 
     } 
     } 
    } 
    } 
} 

Es funktioniert für mich mit Gradel 2.12. Die andere Antwort funktioniert auch für mich.

Verwandte Themen