从很早以前我就一直喜欢Gradle构建工具。 它的潜力甚至在1.0版本之前就已经很明显了,那时变化经常被打破。 如今,升级很少会引起意外。 该工具已经成熟并且运行良好。

Gradle包括一个功能强大的依赖项管理系统,该系统可以与Maven和Ivy存储库以及本地文件系统依赖项一起使用。

在使用Gradle的过程中,我开始依赖一种模式来管理要共享的多项目构建中的依赖项。 此模式包含两个关键实践:

  1. 集中依赖声明在build.gradle
  2. 集中gradle.properties依赖版本声明

两种实践都是将软件开发最佳实践(例如DRY)应用于组成Gradle构建的代码的示例。 让我们更详细地了解它们。

集中依赖声明

在根项目的build.gradle文件中,为整个项目中使用的每个依赖项声明一个新配置 。 在使用依赖项的每个子项目中,声明compile (或testCompile等)配置扩展了依赖项的配置:
根项目build.gradle

subprojects {configurations {commonsIo}dependencies {commonsIo 'commons-io:commons-io:2.5'}
}

子项目build.gradle

configurations {compile.extendsFrom commonsIo
}

通过将所有依赖项声明放在一个位置,我们知道在哪里查找,并防止多个子项目声明具有不同版本的相同依赖项。

此外,各分项工程现在更声明,指明他们只依赖于什么逻辑组件,而不是一个零件怎样从单个的jar文件建立起来的所有细节。 当存在一对一的对应关系时(如在commons IO示例中),这没什么大不了的,但是当使用由多个jar组成的组件(例如Spring框架或Jetty)时,差异就明显了。

集中依赖版本声明

下一步是将根项目的build.gradle文件中的所有版本号替换为根项目的

gradle.properties

build.gradle

dependencies {commonsIo "commons-io:commons-io:$commonsIoVersion"
}

gradle.properties

commonsIoVersion=2.5

通过这种做法,您可以将版本号重新用于相关的依赖项。 例如,如果您使用的是Spring框架,则可能要声明对具有相同版本号的spring-mvcspring-jdbc依赖关系。

这种方法还有一个优点。 升级依赖项意味着更新gradle.properties ,而添加新依赖项则意味着更新build.gradle 。 这使得从提交提要中轻松判断可能进行了哪些类型的更改,从而确定是否需要进行更仔细的检查。

您可以更进一步,将configurationsdependencies块放在单独的文件中,例如, dependencies.gradle

超越…

将所有依赖项声明在一个位置是更高级的供应链管理实践的垫脚石。

集中声明的配置很好地概述了产品中使用的所有组件,即所谓的物料清单(BOM)。 您可以使用上述技术,也可以使用Gradle BOM插件 。

通过BOM,使用OWASP DependencyCheck之类的工具可以更轻松地检查所使用的依赖项中是否公开披露了漏洞。 在EMC,针对我们产品报告的大约80%的漏洞是由第三方组件的问题引起的,因此有必要对依赖项进行安全监视。

可靠的BOM还可简化查看许可证及其合规性要求的过程。 如果您买不起BlackDuck Protex之类的工具,您可以用少量的努力自己编写不太高级的东西。

翻译自: https://www.javacodegeeks.com/2016/05/manage-dependencies-gradle-multi-project-build.html

如何在Gradle多项目构建中管理依赖项相关推荐

  1. 使用Gradle进行项目构建管理

    使用Gradle进行项目构建管理 安装配置Gradle Gradle的安装与配置 创建项目 使用gradle init命令创建root项目 E:\code\myself\china-unicorn&g ...

  2. 由MAVEN入手浅谈项目构建与管理

    Prologue . 前言 第一次写博客,希望爱学习的小伙伴们喜欢. JAVA软件开发领域很喜欢一个名词,叫做"约定大于配置 ".我在此当然约法三章. 写博客优先级很低.希望借此激 ...

  3. maven mockito_如何:测试Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中的依赖项

    maven mockito 对于当今的大多数Java项目而言,JUnit本身还远远不够. 您还需要一个模拟库,也许还有其他东西. 在此迷你操作指南中,我介绍了可以在新的Java项目中开始的测试依赖项. ...

  4. 如何:在Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中测试依赖项

    对于当今的大多数Java项目,JUnit本身还远远不够. 您还需要一个模拟库,也许还有其他东西. 在此迷你操作指南中,我介绍了可以在新的Java项目中开始的测试依赖项. 一切都始于JUnit Mave ...

  5. 让开发自动化: 利用 Ivy 管理依赖项

    http://www.ibm.com/developerworks/cn/java/j-ap05068/index.html 实际上,所有软件开发项目都必须依靠来自其他项目的源代码.例如,许多项目可能 ...

  6. 使用Maven在jar中包含依赖项

    本文翻译自:Including dependencies in a jar with Maven Is there a way to force maven(2.0.9) to include all ...

  7. IDEA插件系列(75):Laconic POM插件——折叠pom文件中的依赖项

    1.插件介绍 Laconic POM插件. 折叠 Maven 的样板文件. 2.安装方式 第一种方式,是在IDEA上搜索插件进行安装,会适配当前IDEA的版本. 第二种安装方式是使用离线插件进行安装. ...

  8. linux+qt导入构建,如何在Qt Creator项目向导中添加自定义构建步骤?

    正如@ 0x35所述,您可以使用 QMAKE_POST_LINK += ,将它放在.pro文件的任何位置. (在windows上,这种方法有时需要先清理一下). 其他参数考虑@hoholok的意见(和 ...

  9. Gradle多项目构建–类似父pom的结构

    当您来自Maven背景时,很可能已经习惯了父pom结构. 现在,在进行gradle时,情况有所不同. 想象一下有一个包含接口和各种其他实现的项目的场景. 这将是我们的项目结构. multi-proje ...

最新文章

  1. TANDEM 基于深度多视图立体视觉的实时跟踪和稠密建图
  2. Editplus下载、安装并最佳配色方案(强烈推荐)
  3. SqlServer性能监控和优化总结
  4. [深度学习] 自然语言处理 --- 文本分类模型总结
  5. 服务器安装rabbitmq教程
  6. mysql创建一张日期表_MySQL创建一张日期表
  7. 人工智能在5G网络中的应用
  8. 做vue项目时报错,Error: spawnSync C:\Program Files\Java\jre1.8.0_201 ENOENT的解决办法!!!简单粗暴!!!
  9. 威纶通触摸屏232脚位_威纶触摸屏tk6070iq232接口引脚电 – 手机爱问
  10. Java方法重写和重载的区别
  11. (2)防火墙的基本配置---1安全域和端口
  12. 学计算机要具备什么能力,具备什么特质能学计算机
  13. 10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第7天 2018/11.1
  14. 第一次学游泳技巧_初学者第一次下水需要注意哪些情况,新手学习游泳需要掌握什么技巧,适合的游泳装备有哪些...
  15. OA 内有 需求收集的好建议
  16. VMware环境下修改Centos qcow2格式镜像
  17. fprint函数与print函数
  18. 微信小程序点击按钮弹出弹窗_微信小程序开发弹出框实现方法
  19. C语言课设:影院售票管理系统
  20. 通用模型切片处理过程 CesiumLab系列教程

热门文章

  1. 【Python】urllib爬取动漫图片
  2. avue中怎样隐藏新增和编辑的按钮
  3. 属性编辑器未在PropertyEditorManager中注册?
  4. java操作字符串——CSDN博客
  5. Python解决中文乱码问题
  6. java计算出生到现在经历了多少天
  7. windows监控txt写入_Windows的bug们
  8. win10关闭快速启动_装系统不求人,快速制作启动U盘,傻瓜式重装WIN10
  9. 防火墙例外里没有远程桌面_证明没有例外
  10. java编写排序的代码_在Java 8之前,您编写了几行代码来对对象集合进行排序?...