Java 将插件永久添加到Gradle

Java 将插件永久添加到Gradle,java,gradle,Java,Gradle,我在很多项目中使用第三方Gradle插件,并希望将此插件永久添加到我的Gradle安装中。目前,我需要向每个build.gradle添加插件,如下所示: buildscript { repositories { jcenter() } dependencies { classpath "com.github.dcendents:android-maven-plugin:1.2" } } 有没有办法将这个插件添加到我的Gradle安装中,这样我就不需要在每个构建文

我在很多项目中使用第三方Gradle插件,并希望将此插件永久添加到我的Gradle安装中。目前,我需要向每个build.gradle添加插件,如下所示:

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath "com.github.dcendents:android-maven-plugin:1.2"
  }
}
有没有办法将这个插件添加到我的Gradle安装中,这样我就不需要在每个构建文件中都包含它


我确实意识到这可能不是最佳做法,可能会导致无法生产的版本。

这是一种黑客行为,而不是解决方案

现在有一个更新版本,它还可以应用插件和添加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])
                    }
            }
        }
    }
}
apply plugin:AddDepPlugin
类AddDepPlugin实现插件{
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插件:1.2”]
def addRepos=[”https://plugins.gradle.org/m2/"]
无效应用(渐变渐变渐变){
def add=0
gradle.allprojects{project->
plugins.whenpluginaded{t->
如果(++add==1){
project.getBuildScriptSource()
def bs=project.getBuildscript()
bs.getDependencies()
def repo=bs.getRepositories()
def ccf=bs.class.getDeclaredField(“classpathConfiguration”)
ccf.setAccessible(真)
def cc=ccf.get(bs)
addDeps.each{k,v->cc.dependencies.add(project.dependencies.create(v))}
addRepos.each{k->repo.maven{->setUrl(k)}
}
如果(加==8)
addDeps.each{k,v->
如果(!k.startsWith(“x”))项目。应用([插件:k])
}
}
}
}
}
在上,我找到了这个替代解决方案(这是针对ENSIME插件的):

apply plugin:AddEnsimePlugin
类AddEnsimePlugin实现插件{
def supportedPlugins=[
'org.gradle.api.plugins.JavaPlugin',
'org.gradle.api.plugins.ScalaPlugin',
'jp.leafytree.gradle.AndroidScalaPlugin'
]
无效应用(渐变渐变渐变){
def added=false
gradle.allprojects{project->
project.with{
如果(父项==null){
构建脚本{
存储库{
jcenter()
马文{
名称“JFrog OSS快照存储库”
url'http://oss.jfrog.org/oss-snapshot-local'
}
}
依赖关系{
类路径'net.coacoas.gradle:ensime gradle:0.2.6'
}
}
}
plugins.whenpluginaded{plugin->
如果(!added&&supportedPlugins.contains(plugin.class.name)){
rootProject.apply插件:“org.ensime.gradle”
已添加=真
}
}
}
}
}
}

Gradle 2.12对我有效。另一个答案也适用于我。

可能是@saberduck的重复,不确定。是否执行
buildscript{
init.gradle
中工作?我从未尝试过,但我看不出原因not@saberduck它给出了一个错误:
评估初始化脚本时出现问题。解决后无法更改配置“classpath”
是否可以尝试用initscript替换buildscript?正如我在这里尝试使用它添加ensim一样e gradle plugin,但它给出:“在根项目“shared scala”中找不到任务‘ensime’。”添加和应用是不同的-我更新了代码段
add==8
部分做了什么?确保在加载/应用此处定义的插件之前,先加载/应用内置插件
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
          }
        }
      }
    }
  }
}