包含许多开发人员和gradle项目的大型项目使用私有(private)的Maven存储库来存储插件,依赖项和发布。
我想定义一个privateMaven()方法,就像内置的jcenter()mavenCentral()google()方法一样。当前,我们在需要使用存储库的任何地方编写maven块-repositoriespublishing.repositoriespluginManagement.repositories,...

repositories {
  maven {
    url "..."
    credentials { ... }
  }
}
我宁愿成为
repositories {
  private()
}
answer解释了如何扩展repositoriesbuildscript.repositories,但不适用于publishing.repositories,因为publishing由插件提供,不适用于pluginManagement.repositories。另外,我还必须枚举每个存储库配置,并且开发人员不能在我们不扩展的任何块中使用privateMaven()
初始化脚本是否可以将方法添加到每个repositories块或每个RepositoryHandler?

最佳答案

假设您使用的是maven-publish插件,则可以这样定义扩展名:
私有(private)等级

apply plugin: 'maven-publish'

publishing.repositories.ext.privateRepo = {
    publishing.repositories.maven {
        url "https://artifactory.website.com/private-repo"
        credentials {...}
    }
}
build.gradle
apply from: 'private.gradle' // or you can just include the script in here

afterEvaluate {
    publishing {
        publications {...}
        repositories {
            privateRepo()
        }
    }
}
如果您想分发脚本,也可以创建一个插件,用法将完全相同。
https://guides.gradle.org/implementing-gradle-plugins/
PrivatePlugin.groovy
class PrivatePlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        // check if the publishing extension exists first
        final publishing = project.extensions.findByType(PublishingExtension.class)
        if (publishing != null) {
            publishing.repositories.ext.privateRepo = {
                publishing.repositories.maven {
                    url "https://artifactory.website.com/private-repo"
                    credentials {...}
                }
            }
        }
    }
}
只需确保如果将其作为插件分发,则不会附带带有硬编码的凭据。

关于gradle - 如何为每个 `repositories`块或每个RepositoryHandler添加方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62760442/

10-12 04:28