如何为gradle存储库定义一个帮助方法?

时间:2017-07-31 17:58:31

标签: java gradle build.gradle

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

repositories {
    mavenCentral()
}

我想定义自己的快捷函数,例如myPrivateMavenRepo(),以便我可以编写类似

的内容
repositories {
    mavenCentral()
    myPrivateMavenRepo()
}

而不是

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

问题:

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

2 个答案:

答案 0 :(得分:2)

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

一种简单的方法是定义这样的配置闭包,动作或地图,并通过插件扩展提供它们:

repositories {
    mavenCentral()
    maven myPluginExtension.myRepoClosure
}

由于RepositoryHandler也是ArtifactRepositoryContainer,您可以直接使用其add等修改方法来创建和注册ArtifactRepository个对象:

repositories {
    jcenter()
    add myPluginExtension.myRepo
}

如果您想直接向RepositoryHandler添加方法,可以alter its meta class。请注意,这是一个Groovy功能,因此您只能在Groovy插件中使用它,而不能在Java插件中使用它。

project.repositories.metaClass.myRepo {
    // implement logic to add repository (e.g. call maven(closure) ...)
}

该方法将在您的构建脚本中提供:

repositories {
    mavenLocal()
    myRepo()
}

答案 1 :(得分:2)

我认为你可能会这样做

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

用法

repositories {
    myPrivateMavenRepo() 
} 

您可以轻松将其转换为插件