使用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
apply from
相比,IDE的主要优点是完全支持跳转到声明、类型和代码完成
我知道这些备选方案:
- 使用复合构建将插件项目定义为同一存储库中的单独gradle项目(在
settings.gradle中使用
)includeFild()
- 在
gradle.properties中保留版本号
- 将版本号作为变量保留在root
中,通常在ext{}块中build.gradle
- 使用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
}