在不同项目之间共享配置的最佳方法是什么?

时间:2014-01-15 07:57:33

标签: gradle build.gradle

我们有3-5个不同的项目。我不希望每次从一个项目到另一个项目的配置的某些部分(如添加常见的maven存储库)复制/粘贴。在不同项目中共享通用配置的最佳方法是什么?

我使用了apply from: "http://path/to/common.build.gradle"构造,但我们的架构师认为这不是最佳解决方案,因为项目构建依赖于存储common.build.gradle的外部服务器。如果您没有与此服务器的连接,则无法构建项目。你怎么看待这件事?

2 个答案:

答案 0 :(得分:4)

在构建之间共享配置的最可靠方法是将其编码为插件类(即实现org.gradle.api.Plugin接口的类),将其作为Jar发布到Maven或Ivy存储库,并将其拉出来使用buildscript块消耗构建。这将确保插件Jar像任何其他工件依赖项一样被缓存。如何解决这个问题在Gradle User Guide中有解释。

答案 1 :(得分:1)

我发现最简单的方法是:

  1. 将公共文件放在某处,以便可以访问url。我选择了神器OSS来发布我的常用gradle文件。
  2. 使用apply from: 'http://acme.com:8081/artifactory/libs-release-local/gradle/common.gradle'
  3. 请注意,Gradle会缓存common.gradle,因此当您离线时,可以使用--ofline选项(gradle --ofline build)运行gradle,如果文件位于缓存中,则构建仍然有效

    some gotchas需要注意。具体来说,您需要在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
    

    虽然这种方法简单而快速,但它的缺点是你的构建过程不是依赖管理和源代码控制,使其无法预测和不确定。