我们有3-5个不同的项目。我不想每次将配置的某些部分从一个项目复制/粘贴到另一个项目(比如添加公共maven存储库)。在不同项目之间共享通用配置的最佳方式是什么?
我使用过apply from: "http://path/to/common.build.gradle"构建,但我们的架构师认为这不是最好的解决方案,因为项目构建依赖于存储common.build.gradle的外部服务器。如果您没有连接到此服务器,则无法生成项目。你觉得那个怎么样?
发布于 2014-01-16 10:34:40
在构建之间共享配置的最可靠方法是将其编码为插件类(即实现org.gradle.api.Plugin接口的类),将其作为Jar发布到Maven或常春藤存储库,并使用buildscript块将其拉入到消费构建中。这将确保插件Jar像任何其他工件依赖项一样被缓存。在Gradle User Guide中解释了如何实现这一点。
发布于 2018-05-31 20:55:10
我发现的最简单的方法是:
请注意,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虽然这种方法简单而快速,但它的缺点是您的构建过程没有得到适当的依赖项管理和源代码控制,这使得它不可预测和不确定。
发布于 2022-02-23 15:01:49
另一种选择是编写自定义gradle包装器。请原谅我没有举一个例子,但这里有一个例子:
https://docs.gradle.org/current/userguide/gradle_wrapper.html
我已经经历过了,它似乎工作得足够好。你在它自己的项目中设置它,并在你当前的包装器旁边发布包装器文件,它必须在公共区域,然后每个项目都可以链接到你的新包装器。
也有gochas的语调,iirc必须使用与Farrukh答案中相同的语法。您还可以将此解决方案与上述每个解决方案混合使用。这个解决方案并不常见,但当您有大量项目需要以相同的方式配置时,它是一个很好的解决方案。
https://stackoverflow.com/questions/21131906
复制相似问题