【问题标题】:How to use init.gradle to provide plugin repositories for plugins configured in the settings.gradle如何使用 init.gradle 为 settings.gradle 中配置的插件提供插件存储库
【发布时间】:2020-01-07 14:20:59
【问题描述】:

我在settings.gradle文件中配置了一个Gradle插件如下,

buildscript {
  dependencies {
    classpath "org.test.group:gradleplugins:${pluginVersion}"
    ...
  }
}

apply plugin: 'org.test.group:gradleplugins'
....

我正在尝试使用 init.gradle 提供工件存储库,如下所示,

initscript {
    repositories {
        maven { url "https://test.repo/gradleplugins" }
        ...
    }
}

另外,我已经为构建任务提供了 init.gradle 文件,

.... -i -I ./init.gradle'

但是构建仍然会出现如下依赖解析错误,

无法解析外部依赖 org.test.group:gradleplugins:1.0.0-SNAPSHOT,因为没有定义存储库。

【问题讨论】:

    标签: gradle gradle-plugin


    【解决方案1】:

    这两种方法都可以通过在 init.gradle 文件中编写 Gradle 插件来完成,如下所示,

    apply plugin: EnterpriseRepositoryPlugin
    
    class EnterpriseRepositoryPlugin implements Plugin<Gradle> {
    
        void apply(Gradle gradle) {
            gradle.settingsEvaluated { settings ->
                settings.pluginManagement {
                    repositories {
                        maven { url "https://repo.org/gradleplugins" }
                        maven { url "https://repo.org/maven" }
                    }    
                }
            }
        }
    }
    

    根据 Gradle 文档, https://docs.gradle.org/current/userguide/init_scripts.html

    【讨论】:

    【解决方案2】:

    init.gradle 有另一个用途(并且该文件正在被自动检测)。

    void settingsEvaluated​(Settings settings) 可能只是有机会操纵这些设置(但问题没有提供这样做的最不正当的理由,只有一个存储库)。似乎您不必要地使事情过于复杂,否则不会有问题。这也不属于settings.gradle(这也有另一个目的)。只需将插件repositories 添加到它们所属的根项目build.gradlebuildscript 块中。在静态定义插件repositories 时,userguide 显示了它的外观。

    【讨论】:

    • 我们公司需要让这些常见的配置远离模块。因为可以很容易地管理更改,所以将来可以从一个点更改所有模块的工件存储库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多