Gradle 什么';在不同的项目之间共享配置的最佳方式是什么?

Gradle 什么';在不同的项目之间共享配置的最佳方式是什么?,gradle,build.gradle,Gradle,Build.gradle,我们有3-5个不同的项目。我不想每次将配置的某些部分从一个项目复制/粘贴到另一个项目(比如添加公共maven存储库)。在不同的项目中共享公共配置的最佳方式是什么 我使用了apply from:“http://path/to/common.build.gradle“construction但我们的架构师认为这不是最好的解决方案,因为项目构建依赖于存储common.build.gradle的外部服务器。如果您没有连接到此服务器,则无法生成项目。你觉得怎么样 在构建之间共享配置最可靠的方法是将其编码为

我们有3-5个不同的项目。我不想每次将配置的某些部分从一个项目复制/粘贴到另一个项目(比如添加公共maven存储库)。在不同的项目中共享公共配置的最佳方式是什么


我使用了
apply from:“http://path/to/common.build.gradle“
construction但我们的架构师认为这不是最好的解决方案,因为项目构建依赖于存储
common.build.gradle
的外部服务器。如果您没有连接到此服务器,则无法生成项目。你觉得怎么样

在构建之间共享配置最可靠的方法是将其编码为插件类(即实现
org.gradle.api.plugin
接口的类),将其作为Jar发布到Maven或Ivy存储库,并使用
buildscript
块将其拉入消费构建。这将确保插件Jar像任何其他工件依赖一样被缓存。如何实现这一点在中进行了说明。

我发现的最简单的方法是:

  • 将公共文件放在某个位置,以便url可以访问。我选择artifactory OSS来发布我的通用gradle文件
  • 使用
    apply from:'http://acme.com:8081/artifactory/libs-发布本地/gradle/common.gradle'
  • 请注意,Gradle缓存common.Gradle,因此当您脱机时,可以使用--ofline选项(
    Gradle--ofline build
    )运行Gradle,并且如果文件在缓存中,则生成仍然有效

    有很多值得注意的地方。具体来说,您需要在common.gradle中使用较旧的插件机制,并使用完全限定的类名(因为它是类引用,所以在它周围没有任何引号)。见下文要点:

    buildscript {
        // Have to use old plugin mechanism if not in build.gradle
        // https://discuss.gradle.org/t/how-do-i-apply-a-plugin-to-a-project-from-a-shared-applied-gradle-file/7508/15
        repositories {
            jcenter()
        }
        dependencies {
            classpath "org.jfrog.buildinfo:build-info-extractor-gradle:latest.release"
            classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.2"
            classpath "pl.allegro.tech.build:axion-release-plugin:1.9.1"
        }
    }
    
    apply plugin: org.jfrog.gradle.plugin.artifactory.ArtifactoryPlugin
    apply plugin: org.sonarqube.gradle.SonarQubePlugin
    apply plugin: pl.allegro.tech.build.axion.release.ReleasePlugin
    

    虽然这种方法简单且快速,但它的缺点是您的构建过程没有得到适当的依赖性管理和源代码控制,这使得它不可预测且不确定。

    您考虑过init脚本吗?您是在谈论不同的
    构建吗,或者同一个多项目构建的不同
    项目
    ?我说的是不同的项目,它们没有共同的父项目,这很有趣。你有使用插件共享公共配置设置的具体例子(博客文章、文章)吗?我不知道有这样的资源,但是网络搜索可能会发现一些东西。执行公共配置正是插件的目的。(二进制)插件的功能与(可重用)构建脚本完全相同,只是它们是作为类实现的。