想象一下,您有一个带有gradle子项目的gradle构建。 该子项目有一些已应用的脚本插件,它们定义了自己的存储库,如下所示:
buildscript {
repositories {
//jcenter()
maven {
url 'https://example.com/plugins.gradle.org/m2/'
}
}
dependencies {
classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3'
}
}
现在想象您只拥有主项目,而不是子项目(它是git子模块)。
如何从主项目覆盖子项目的存储库定义?
PS:如果您需要对子项目的更好描述,则为:https://github.com/docToolchain/docToolchain
更新:我创建了一个示例,以配合使用:https://github.com/rdmueller/SO56283254/blob/master/README.adoc
有关详细信息,请参见自述文件
答案 0 :(得分:2)
正如我之前的评论所述,您处于问题/请求中所述的相同情况 https://discuss.gradle.org/t/configure-buildscript-repositories-for-all-project-globally-in-init-gradle/6572/2,它与未解决的问题https://github.com/gradle/gradle/issues/1038有关。不幸的是,这个问题尚未解决。
我有一个更深的外观,在我看来无法使用当前的Gradle版本来完成此工作:无法通过注入其他buildscript
来“改变”脚本插件的repositories
块,因此Gradle在将其应用到子项目之前将无法编译该脚本插件。
答案 1 :(得分:0)
我只是尝试了一下,而我没有一个子项目具有构建脚本的项目:
.checked
主要问题可能是自上而下配置的;例如。传递命令行参数以应用备用SelectAll2
块是可行的,但是不能在子项目范围内更改根项目的配置。子项目具有自己的// this lists buildscript repositories:
getRootProject().getBuildscript().getRepositories().each { repo ->
println "root: " + repo.getName().toString()
}
// this might list nothing:
subprojects.findAll { project ->
project.buildscript.getRepositories().each { repo ->
println "sub: " + repo.getName().toString()
}
}
块(这些Gradle插件依赖项的行为与常规Java依赖项不同-通常只能决定将其应用于何处)可能并不常见。
答案 2 :(得分:0)
我相信我对问题中描述的情况有解决方案(但请注意以下警告!)。您可以将以下内容放入根项目的settings.gradle
文件中:
gradle.allprojects { project ->
if (project.path == ':subproject') {
project.buildscript.repositories { repos ->
all { repo ->
// filtering by repo name here; you could certainly also use
// the URL or other properties
if (repo.name == 'maven') {
remove repo
// TODO replace with the repo you need here:
mavenCentral()
}
}
}
}
}
正如M.Ricciuti’s answer所说,警告是,此不适用于脚本插件中的buildscript存储库,例如您应用于示例GitHub项目的子项目({{1 }}。