gpt4 book ai didi

gradle - 如何为每个 `repositories` block 或每个 RepositoryHandler 添加一个方法?

转载 作者:行者123 更新时间:2023-12-03 02:57:48 25 4
gpt4 key购买 nike

一个包含许多开发人员和 gradle 项目的大型项目使用私有(private) Maven 存储库来存储插件、依赖项和发布。

我想定义一个 privateMaven() 方法,就像内置的 jcenter()mavenCentral()google() 方法。目前我们在需要使用存储库的任何地方编写一个 maven block - repositoriespublishing.repositoriespluginManagement.repositories, ...

repositories {
maven {
url "..."
credentials { ... }
}
}

我更想成为

repositories {
private()
}

answer解释了如何扩展 repositoriesbuildscript.repositories 但它不适用于 publishing.repositories 因为 publishing 是由插件提供,不适用于 pluginManagement.repositories。此外,我还必须枚举每个存储库配置,开发人员不能在我们未扩展的任何 block 中使用 privateMaven()

有没有办法让初始化脚本向每个 repositories block 或每个 RepositoryHandler 添加一个方法?

最佳答案

假设您正在使用 maven-publish 插件,您可以像这样定义一个扩展:

private.gradle

apply plugin: 'maven-publish'

publishing.repositories.ext.privateRepo = {
publishing.repositories.maven {
url "https://artifactory.website.com/private-repo"
credentials {...}
}
}

构建.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` block 或每个 RepositoryHandler 添加一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62760442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com