Gradle—单独(在其他)git存储库中DSL的公共部分

Gradle—单独(在其他)git存储库中DSL的公共部分,gradle,Gradle,我们使用我们的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 }

我们使用我们的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
 }

因此,在我所有的脚本中,这些脚本都是独立的项目,位于独立的git存储库中,公共部分1是重复的

有没有正确的方法将公共部分定义为一个特定的项目这不能是插件的一部分-公共部分也会定期更改

我想在创建新项目时参考此部分,并仅描述项目特定的设置

它看起来像gradle多项目构建,但公共部分应该在其他git存储库/Nexus中


重要的澄清-公共部分也可以在Nexus中,有一个版本具有POM描述符

有一个固执己见的插件和一个基本插件是很常见的。Gradle经常使用这个概念

一个例子是java插件自动应用java基本插件。因此,Javabase插件包含所有任务逻辑,但实际上什么都不做。java插件添加任务并进行配置,例如添加src/main/java和src/test/java约定。所以Javabase插件不是固执己见的,java插件是固执己见的

所以,你可以做同样的事情,有一个基本插件和一个自以为是的插件

应用基本插件 配置特定于您的用例的环境 还请注意,如果将逻辑放入project.with{…}closure中,则可以将逻辑从build.gradle移动到插件。例如:

class MyPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.with {
            subprojects { ... }
            configurations { ... }
            dependencies { ... }
            task foo(type: Bar) { ... }
        }
    }
}

你的问题还有另一个解决办法。这种方法可能不如使用固执己见的插件干净,但它允许您独立于项目管理简单的Gradle脚本:

apply from:术语包含Gradle脚本不仅限于文件路径,还可以处理URL。这样,您就可以在独立的存储库中简单地管理脚本,并通过web服务器提供最新版本

要测试这种脚本分发和访问方式,您甚至可以使用各种存储库平台(如GitHub或Bitbucket)提供的原始文件视图功能:

apply from: 'https://raw.githubusercontent.com/<user>/<repo>/<branch>/<file>'

这种方法的最大缺点是,每次构建都需要访问本地甚至全局web服务器,如果需要确保公司外部或脱机构建,则应坚持使用@LanceJavas解决方案并使用自定义插件。

感谢您的回复。但也许我有一个稍微不同的问题-基本的通用功能是一个脚本,它也会经常更改,并且可以经常更改。我想将所有这些更改应用于我的所有脚本。例如,作为java项目中的JAR依赖项。因此,将脚本打包到插件JAR中,并让插件在通过apply from执行脚本之前提取脚本。您可以使用动态版本或快照版本,以便插件的更新将自动传递到ProjectsAnks。我明白您的意思,我将在几天内尝试此解决方案
apply from: 'https://raw.githubusercontent.com/<user>/<repo>/<branch>/<file>'