我有许多微服务,每个服务/项目都有自己的build.gradle文件,但我想知道我是否可以制作一个集中的build.gradle,可以将其拉入以减少数量每个项目中的代码,也有助于减少每个服务更新依赖关系的时间。
我最初的想法是将某些东西放入JFrog的Artifactory并从那里拉出来,但我很好奇是否已经有相同的常规做法。
答案 0 :(得分:4)
如果我正确地理解了您的问题,那么您所谈论的是多个项目的共享环境,在这个意义上可能并不相关,它们是一起构建的。对于这样的环境,您确实应该开发一个具有公共代码库的插件。
这种插件的简单解决方案是所谓的脚本插件,它基本上是一个Gradle脚本,就像build.gradle
一样。它可以通过以下方式包括在内:
apply from: 'path/to/script.gradle'
// or
apply from: 'http://my.domain.tld/script.gradle'
更先进但更复杂的解决方案是开发二进制插件。您可以通过任何存储库提供插件,并将其包含在任何其他Gradle插件中。
答案 1 :(得分:0)
一个选项是blowdryer。首先,将您的通用代码和配置文件分解到一个单独的git存储库中(blowdryer-diffplug是一个很好的示例)。
在要使用这些脚本和配置文件的项目中,将构建指向该存储库中的特定提交或标记:
// settings.gradle
blowdryerSetup {
github 'diffplug/blowdryer-diffplug', 'tag', '2.0.0' // can also use commit SHA
//devLocal '../blowdryer-diffplug' // for local development
}
现在,在整个构建过程中,您都可以使用中文字符将任何文件干燥(dry)。例如
apply from: 干.file('someScript.gradle')
somePlugin {
configFile 干.file('somePluginConfig.xml')
configProp 干.prop('propfile', 'key') // returns value of 'key' in 'propfile.properties'
}
您不必将脚本发布在单独的存储库中,也只需指向项目to itself,它仍然很方便,因为您不必担心相对路径和绝对路径。它还具有一些可选工具,可帮助构造这些脚本,您可以在project's readme中了解更多信息。