覆盖gradle子项目中的存储库定义

时间:2019-05-23 21:38:07

标签: gradle

想象一下,您有一个带有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

有关详细信息,请参见自述文件

3 个答案:

答案 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 }}。

相关问题