gradle - gradle 配置是否合并或覆盖?

标签 gradle

假设我定义了一个插件,如下所示:

import org.gradle.api.artifacts.dsl.RepositoryHandler
import org.gradle.api.artifacts.repositories.MavenArtifactRepository
import org.gradle.api.Project
import org.gradle.api.Plugin

class MyRepos implements Plugin<Project> {
    static final String NEXUS_URL = 'http://nexus.mine.com/nexus/content/repositories/'
    static final List<String> NEXUS_REPOS = [
        'central',
        'build',
        'snapshots',
        'release-candidates',
        'releases',
    ]

    void apply(Project project) {
        project.repositories {
            NEXUS_REPOS.each {
                maven {
                    url (NEXUS_URL + it)
                }
            }
            mavenLocal()
        }
        project.buildscript {
            repositories {
                maven {
                    url (NEXUS_URL + 'central')
                }
                mavenLocal()
            }
        }
    }
}

在本地 build.gradle 中,我写
apply plugin: MyRepos

buildscript {
    dependencies {
       ...
    }
}

我希望合并两个 buildscript 部分,以便在插件中定义存储库并在 build.gradle 中定义依赖项,但似乎本地声明覆盖了插件,我最终得到一个错误,指示“没有定义存储库”。

如果我通过顶级 build.gradle 的配置注入(inject)来执行此操作,结果是否相同?

也许正确的解决方案是让插件提供一个 ext 闭包来定义 useMyRepos() 类似于使用 mavenCentral() 的方式......

最佳答案

通常 gradle 中的配置项是合并的,因此您可以在不同的位置应用配置。例如,您可以在一个构建脚本中配置一些依赖项,这些依赖项将应用于另一个将添加额外依赖项的构建脚本。

但是,您的情况有点不同,因为您使用的是 buildScript配置可用于定义构建脚本本身的依赖关系,而不是根 repositories用于定义您构建的项目的依赖关系的节点。

在这种情况下,根据 Purpose of buildScript in Gradle因为这些是不同的配置,你必须定义你的依赖两次。

关于gradle - gradle 配置是否合并或覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29376413/

相关文章:

Android Studio - 构建变体和模块选择

java - 如何在 Gradle 中共享通用测试依赖版本?

java - Gradle 错误 : Could not find method add() for arguments

android - Fabric Beta 发行说明和 Gradle Kotlin DSL

java - 在gradle中导入Apache速度会降级HttpServletResponse

Android Studio gradle 构建卡在应用程序 :processDebugResources

android - Gradle Espresso-在根项目中找不到任务connectedProductFlavorBuildTypeAndroidTest

android - 设置 applicationidsuffix 时找不到包名称的匹配客户端

android - Unity Android-针对x86_64体系结构的Cant Build

java - 永久添加一个插件到 Gradle