gpt4 book ai didi

android - 在 gradle 中重构 Maven block

转载 作者:行者123 更新时间:2023-12-03 04:46:55 24 4
gpt4 key购买 nike

我正在开发一个 android 项目,并且有许多使用相同凭据的自定义存储库:

repositories {
maven {
url "<url1>"
credentials {
username = "<username>"
password = "<password>"
}
}

maven {
url "<url2>"
credentials {
username = "<username>"
password = "<password>"
}
}

}

有没有办法定义一个方法( block ?),这样我就可以定义一次用户名和密码,而不必每次都重复?我希望能够做到:

repositories {
customMaven { url "<url1>"}
customMaven { url "<url2>"}
}

如果我在这里使用的术语不正确,我深表歉意 - gradle 语法对我来说有点神秘。

最佳答案

@ToYonos 提供的第一个答案可以正常工作,但如果您正在寻找基于配置 block 的解决方案,您可以使用方法 MavenArtifactRepository maven(Action<? super MavenArtifactRepository> action)来自 RepositoryHandler类(see here),如下:

// a Closure that builds an Action for configuring a MavenArtifactRepository instance
def customMavenRepo = { url ->
return new Action<MavenArtifactRepository>() {
void execute(MavenArtifactRepository repo) {
repo.setUrl(url)
repo.credentials(new Action<PasswordCredentials>() {
void execute(PasswordCredentials credentials) {
credentials.setUsername("<username>")
credentials.setPassword("<password>")
}
});
}
};
}

// usage
repositories {
jcenter()
maven customMavenRepo("http://company.com/repo1")
maven customMavenRepo("http://company.com/repo2")
maven customMavenRepo("http://company.com/repo3")
}

EDIT 来自以下评论:Closure 的解决方案如下所示。我认为使用 curry这里需要方法(参见 Currying closure ),但也许还有其他方法可以简化...

// one closure with URL as parameter
ext.myCustomMavenClosure = { pUrl ->
url pUrl
credentials {
username = "<username>"
password = "<password>"
}
}
// helper function to return a "curried" closure
Closure myCustomMaven (url){
return myCustomMavenClosure.curry(url)
}

repositories {
// use closure directly
maven myCustomMavenClosure.curry ("http://mycompany.com/repo1")
// or use helper method
maven myCustomMaven("http://mycompany.com/repo2")
}

关于android - 在 gradle 中重构 Maven block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52610815/

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