Java 如何为gradle存储库定义助手方法?

Java 如何为gradle存储库定义助手方法?,java,gradle,build.gradle,Java,Gradle,Build.gradle,例如,Gradle脚本具有定义常见已知存储库的快捷功能 repositories { mavenCentral() } 我想定义自己的快捷方式函数,比如myPrivateMavenRepo(),这样我就可以编写 repositories { mavenCentral() myPrivateMavenRepo() } 而不是 repositories { mavenCentral() maven { url "http://repo.my

例如,Gradle脚本具有定义常见已知存储库的快捷功能

repositories {
    mavenCentral()
}
我想定义自己的快捷方式函数,比如
myPrivateMavenRepo()
,这样我就可以编写

repositories {
    mavenCentral()
    myPrivateMavenRepo()
}
而不是

repositories {
    mavenCentral()
    maven {
        url "http://repo.mycompany.com/maven2"
    }
}
问题:

  • 如何开发定制回购功能
  • 这个自定义函数托管在哪里
  • 我有很多repo我想切换到gradle我不想用repo Url硬编码每个build.gradle文件我如何以一种易于引导的方式集中这些文件

存储库闭包中的方法由接口定义。当
mavenCentral()
mavenLocal()
jcenter()
添加预定义的存储库时,所有其他方法都需要配置闭包、操作或映射,这些配置闭包、操作或映射将应用于新的存储库

一种简单的方法是定义此类配置闭包、操作或映射,并通过插件扩展提供它们:

repositories {
    mavenCentral()
    maven myPluginExtension.myRepoClosure
}
由于
RepositoryHandler
也是一个,您可以直接使用其修改方法,如
add
来创建和注册
ArtifactRepository
对象:

repositories {
    jcenter()
    add myPluginExtension.myRepo
}
如果要将方法直接添加到
RepositoryHandler
,可以。请注意,这是一个Groovy特性,因此您只能在Groovy插件中使用它,而不能在Java插件中使用它

project.repositories.metaClass.myRepo {
    // implement logic to add repository (e.g. call maven(closure) ...)
}
该方法将在生成脚本中可用:

repositories {
    mavenLocal()
    myRepo()
}

我想你也可以

allprojects {
    repositories.ext.myPrivateMavenRepo = {
        repositories.maven {
           url: 'http://repo.mycompany.com/maven2'
       } 
    } 
} 
用法

repositories {
    myPrivateMavenRepo() 
} 
你可以很容易地把它变成你正在寻找的插件