我正在实现一个自定义插件,在这个插件中我提供了一个默认的存储库配置,如下所示:
class MyPlugin implements Plugin<Project> {
...
...
...
@Override
void apply(Project project) {
project.repositories {
mavenLocal()
mavenCentral()
jcenter()
}
...
...
...
}
}
但是,为了能够在构建脚本中应用我的插件,客户端代码无论如何都会在其构建脚本中添加如下部分:
buildscript {
repositories {
mavenLocal()
maven { url "<organization maven repo url>" }
mavenCentral()
}
dependencies {
classpath 'com.organization.xxx:my-plugin:1.0.130'
}
}
apply plugin: 'com.organization.my-plugin'
鉴于此,我希望能够做这样的事情:
class MyPlugin implements Plugin<Project> {
...
...
...
@Override
void apply(Project project) {
project.repositories = project.buildscript.repositories
...
...
...
}
}
但是,当我这样做时,我收到一个错误,这是可以理解的,因为 project.repositories
属性是只读的。
那么,有没有一种正确的方法可以实现我想要的目标?
最佳答案
我认为该错误是因为您试图为属性 project.repositories
赋值。幸运的是,您只需要添加存储库,所以也许这会起作用(未经测试)
@Override
void apply(Project project) {
project.repositories.addAll(project.buildscript.repositories)
}
顺便说一句,我不确定您是否真的想这样做。更好的办法是在其他地方定义公共(public)存储库,然后添加到构建脚本和项目
关于Gradle:使用 BuildScript RepositoryHandler 作为项目存储库处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35614652/