持续交付 36 讲
王潇俊
携程系统研发部总监
39682 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
开篇词 (1讲)
结束语 (1讲)
持续交付 36 讲
15
15
1.0x
00:00/00:00
登录|注册

15 | 构建检测,无规矩不成方圆

检查重复类
作用
应用场景
依赖检查逻辑
CheckSubModuleSaveVersion
CheckDistributionManagementRepository
CheckGroupId
CheckVersion
banDuplicateClasses 规则
dependencyConvergence 规则
bannedDependencies 规则
集成 super-pom 实现自动运行检查
使用示例
提供的通用检查规则
自定义检查规则的应用
Maven Enforcer 插件的应用
通用的依赖检查服务
Talos
自定义的 Enforcer 检查规则
丰富的内置的 Enforcer 规则
什么是 Maven Enforcer 插件?
总结与实践
构建依赖检查服务
Maven Enforcer 插件
构建检测

该思维导图由 AI 生成,仅供参考

在这个专栏的第 5 篇文章《手把手教你依赖管理》中,我介绍了构建 Java 项目的一些最佳实践,同时也给你抛出了一个问题:如果用户偷懒不遵循这些规范该怎么办?
所谓没有规矩不成方圆,构建是持续交付过程中非常重要的一步,而好的构建检测则可以直接提升交付产物的质量,使持续交付的流水线又快又稳。所以,也就有了 Maven 构建中的大杀器:Maven Enforcer 插件。

什么是 Maven Enforcer 插件?

Maven Enforcer 插件提供了非常多的通用检查规则,比如检查 JDK 版本、检查 Maven 版本、检查依赖版本,等等。下图所示就是一个简单的使用示例。
上述的配置会在构建时(准确的说是在 validate 时)完成三项检查:
requireMavenVersion 检查 Maven 版本必须大于 3.3.9;
requireJavaVersion 检查 JDK 版本必须大于等于 1.9;
requireOS 检查 OS 必须是 Windows 系统。
如果你使用 Java 1.8, Maven 3.3.3, 在 Linux 上构建, 便会出现如下的错误:
Rule 0: org.apache.maven.plugins.enforcer.RequireMavenVersion failed with message: Detected Maven Version: 3.3.3 is not in the allowed range 3.3.9.
Rule 1: org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message: Detected JDK Version: 1.8.0-77 is not in the allowed range 1.9.
Rule 2: org.apache.maven.plugins.enforcer.RequireOS failed with message: OS Arch: amd64 Family: unix Name: linux Version: 3.16.0-43-generic is not allowed by Family=windows
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Maven Enforcer插件在持续交付过程中扮演着至关重要的角色,为Maven构建提供了强大的支持和丰富的内置规则以及自定义检查规则。本文介绍了Maven Enforcer插件的作用和使用方法,并分享了携程在构建检查上的实践经验。通过该插件,可以实现对Maven版本、JDK版本、操作系统等方面的检查,禁止使用特定依赖版本,解决依赖冲突等问题,从而提升交付产物的质量和稳定性。此外,携程还基于Maven Enforcer开发了一些自定义的检查规则,为读者提供了一些实践经验可供借鉴。文章还介绍了构建依赖检查服务Talos,为C#、NodeJS等语言的项目提供了依赖检查解决方案。总之,本文全面涵盖了Maven Enforcer插件的各个方面,对于需要了解构建检测的读者具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《持续交付 36 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • Triton
    感谢分享,由于本身没有太多持续集成的经验,听上去比较抽象如果是创业公司应该做到那些?

    作者回复: 一些基本的默认规则就可以了,很多检查是为了预防集成错误的,在多团队,细分工下意义很大

    2018-08-07
    4
  • 玉军
    这种构建检查大部分都是环境的检查?有没有更深层次的检查?比如构建检查提高每日构建的成功率?同时ant有没有这方面的插件?

    作者回复: 不仅仅是环境的检查,也可以检查依赖,配置管理等任何自定义的内容;已经持续构建的情况下,就不再关注每日构建了;ant比较难做,ant的机制与目前大多数包管理的方式不太一样,更多是文件及目录的引用

    2018-12-22
    2
  • 吃饱了晒太阳
    遇到个问题想请教下,在服务器上搭建了一个ubuntu docker镜像,里面软件测试都已装好,CI触发脚本测试时候,一直提示redis拒绝连接,调用的脚本也是在容器里的,在容器里执行就可以,但是每次提交触发测试就会提示拒绝连接,是因为什么呢,redis也允许外部连接,是docker网络问题?还请指点

    作者回复: 如果远程调用报错的话,可以看下docker的网络配置

    2018-08-08
    1
  • Robert小七
    请问老师,如何检查项目的继承树?
    2020-01-01
  • 飞毛兔
    公司搭建了一个共享的maven库,有多个供应商使用。但个别供应商要求能自行上传依赖并且这些私有依赖不能暴露给其他供应商,请问有什么解决方案吗?
    2019-12-18
  • Mingyan
    都是java的 有php的如何做持续集成吗?
    2019-08-19
  • Robert小七
    这个插件可以在maven的配置文件中配置后,其他任何应用构建时进行检查吗?
    2019-07-03
  • YoungerChina
    更像依赖版本管理检测
    2019-02-12
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部