2015-02-18 19 views
18

पर स्थायी रूप से प्लगइन जोड़ें, मैं कई परियोजनाओं में एक थर्ड-पार्टी ग्रैडल प्लगइन का उपयोग करता हूं और इस प्लगइन को स्थायी रूप से मेरे ग्रेडल इंस्टॉलेशन में जोड़ना चाहता हूं। वर्तमान में मैं इतना की तरह प्रत्येक build.gradle लिए प्लगइन जोड़ने की जरूरत:ग्रैडल

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

मेरे Gradle स्थापना करने के लिए इस प्लगइन जोड़ने के लिए इतना है कि मैं हर निर्माण फ़ाइल में शामिल करने की जरूरत नहीं है कोई तरीका है?

मुझे एहसास है कि यह सबसे अच्छा अभ्यास नहीं हो सकता है और परिणामस्वरूप अप्रतिबंधित निर्माण हो सकता है।

+0

[ग्लैडल में ग्लोबल प्लगइन्स] के संभावित डुप्लिकेट (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: 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 
      } 
     } 
     } 
    } 
    } 
} 

यह मेरे लिए काम करता है:

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 प्लगइन जोड़ने के लिए इसका उपयोग करने का प्रयास किया, लेकिन यह देता है: "टास्क 'ensime' रूट प्रोजेक्ट 'साझा-स्कैला' में नहीं मिला है।" –

+0

जोड़ना और लागू करना अलग है - मैंने स्निपेट – bebbo

+0

अपडेट किया है 'add == 8' सेक्शन क्या करता है? – RaGe

1

http://ensime.github.io//build_tools/gradle/ पर मैं इस वैकल्पिक समाधान (इस ENSIME प्लगइन के लिए है) पाया ग्रैडल 2.12 के साथ। दूसरा जवाब भी मेरे लिए काम करता है।