包含许多开发人员和gradle项目的大型项目使用私有(private)的Maven存储库来存储插件,依赖项和发布。
我想定义一个privateMaven()
方法,就像内置的jcenter()
,mavenCentral()
和google()
方法一样。当前,我们在需要使用存储库的任何地方编写maven
块-repositories
,publishing.repositories
,pluginManagement.repositories
,...
repositories {
maven {
url "..."
credentials { ... }
}
}
我宁愿成为repositories {
private()
}
此answer解释了如何扩展repositories
和buildscript.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.gradleapply 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/