gpt4 book ai didi

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

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

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

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/

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