假设我定义了一个插件,如下所示:
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中的依赖项中定义存储库,但看起来本地声明会覆盖插件,最终会出现错误,指示& #34;没有定义存储库&#34;。
如果我是通过顶层build.gradle的配置注入来完成的,结果是否相同?
也许正确的解决方案是插件提供一个ext闭包来定义useMyRepos(),类似于mavenCentral()的使用方式......
答案 0 :(得分:1)
通常合并gradle中的配置项,以便您可以在不同位置应用配置。例如,您可以在一个构建脚本中配置一些依赖项,这些依赖项将应用于将添加其他依赖项的另一个构建脚本。
但是,您的情况稍有不同,因为您正在使用buildScript
配置,这可用于定义构建脚本本身的依赖关系,而不是根repositories
节点。用于定义您构建的项目的依赖关系。
在这种情况下,根据Purpose of buildScript in Gradle,因为这些是不同的配置,您必须两次定义您的依赖关系。