使用gradlebuildsrc进行依赖关系管理

使用gradlebuildsrc进行依赖关系管理,gradle,dependency-management,Gradle,Dependency Management,在buildSrc/src/main/groovy/dependencies.gradle中管理多模块gradle依赖关系是否有用?缺点是什么 例如: buildSrc/src/main/groovy/myproject/Dependencies.groovy package myproject class Dependencies { static Map<String, String> versions = [ junit: '4.12' ]

buildSrc/src/main/groovy/dependencies.gradle
中管理多模块gradle依赖关系是否有用?缺点是什么

例如:

buildSrc/src/main/groovy/myproject/Dependencies.groovy

package myproject

class Dependencies {
    static Map<String, String> versions = [
        junit: '4.12'
    ]
    static Map<String, String> libraries = [
        "junit:junit:${versions.junit}"
    ]
}
结果:

  • Pro:IDE(IntelliJ)跳转到定义,支持代码完成
  • 赞成:如果不更改buildSrc中的文件,执行应该更快
  • Pro:在buildScript块中易于使用的版本号
  • Pro:如果需要,可以使用普通Groovy或GradleAPI
  • Con:在多项目构建中,每次更改都会触发所有模块的重建,而不仅仅是真正受影响的模块
  • 缺点:位置
    buildSrc/src/main/groovy/myproject/Dependencies.groovy
    非常遥远,可以通过
    buildSrc/src/Dependencies
其他人怎么想?在buildSrc中将更多的gradle构建逻辑移到groovy文件中也可能对其他配置有用。与
apply from
相比,IDE的主要优点是完全支持跳转到声明、类型和代码完成

我知道这些备选方案:

  • 使用复合构建将插件项目定义为同一存储库中的单独gradle项目(在
    settings.gradle中使用
    includeFild()
  • gradle.properties中保留版本号
  • 将版本号作为变量保留在root
    build.gradle
    中,通常在ext{}块中
  • 使用Spring依赖关系管理插件(可选BOM)
  • 每个依赖项(组)使用新配置

您可能遇到的一个问题是,每当您更改版本时,由于类路径的更改,任务会重新运行(例如您在
buildSrc
中定义的任何其他任务)。如果您使用构建缓存,这可能会影响构建的增量,并减少缓存命中。好的观点。在偶尔的情况下,缓存命中率会低于最佳值,但我认为“正常”使用应该不会有问题。如果回购协议的规模很大(1000个包),那么仅仅缺乏依赖声明的隔离可能就是一个问题。理想情况下,依赖项(-version)的更改只会影响使用该依赖项的模块。不确定是否可以实现这一理想,同时避免重复声明,可能仅使用生成生成生成文件的meta buildscript。我发现的另一个小问题是,当buildSrc中的文件发生更改时,任何IDE都可能无法自动刷新,因为这比build.gradle更改更不寻常。本文中也提到了这一点:您可能遇到的一个问题是,每当您更改版本时,由于类路径更改而重新运行任务(例如您在
buildSrc
中定义的任何其他任务)。如果您使用构建缓存,这可能会影响构建的增量,并减少缓存命中。好的观点。在偶尔的情况下,缓存命中率会低于最佳值,但我认为“正常”使用应该不会有问题。如果回购协议的规模很大(1000个包),那么仅仅缺乏依赖声明的隔离可能就是一个问题。理想情况下,依赖项(-version)的更改只会影响使用该依赖项的模块。不确定是否可以实现这一理想,同时避免重复声明,可能仅使用生成生成生成文件的meta buildscript。我发现的另一个小问题是,当buildSrc中的文件更改时,任何IDE都可能不会自动刷新,因为这比build.gradle更改更不寻常。本文中还提到了这一点:
import example.Dependencies

dependencies {
    testCompile Dependencies.libraries
}