gpt4 book ai didi

gradle - Gradle-单独(其他)git存储库中DSL的通用部分

转载 作者:行者123 更新时间:2023-12-03 05:11:48 28 4
gpt4 key购买 nike

我们使用cusrom插件并以这种方式定义脚本(这是一个近似的伪代码):

//It is common part for every script (1)
environments {
"env1" {
server mySettings("host1", "port1", "etc")
}
"env2" {
server mySettings("host2", "port2", "etc")
}
... //another common scopes
}


def defaultSettings(def envHost,    def envPort = "15555"  ...) {
return {
// Specific settings for the current script (package names, versions etc)
}
}

因此,在我所有的脚本(它们是单独的项目,并且在单独的git存储库中)中,重复了通用部分(1)。

是否有任何正确的方法将公用部分定义为特定项目(这不能是插件的一部分-公用部分也会定期更改)?

我想在创建新项目时引用此部分,并且仅描述特定于项目的设置。

看起来像gradle的多项目构建,但是共同的部分应该在其他git仓库/ Nexus中。

重要说明-公用部分也可以在Nexus中,有一个版本(具有POM描述符)。

最佳答案

拥有“opinionated”插件和“base”插件是很常见的。 Gradle经常使用此概念。

一个示例是java插件自动应用java-base插件。因此,java-base插件包含所有任务(逻辑),但实际上不执行任何操作。 java插件添加任务并对其进行配置(例如,它添加了src/main/javasrc/test/java约定)。因此,对java-base插件没有意见,对java插件则没有意见。

因此,您可以做同样的事情,有一个base插件和一个opinionated插件,

  • 应用base插件
  • 配置特定于您的用例的环境

  • 还要注意,如果将逻辑放在 build.gradle闭包内,则可以将逻辑从 project.with { ... }移到插件。例如:
    class MyPlugin implements Plugin<Project> {
    void apply(Project project) {
    project.with {
    subprojects { ... }
    configurations { ... }
    dependencies { ... }
    task foo(type: Bar) { ... }
    }
    }
    }

    关于gradle - Gradle-单独(其他)git存储库中DSL的通用部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44515129/

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