2025年依赖管理

依赖管理依赖管理 http bohr me dependency management 项目依赖问题很让人头痛 也出了很多事故 线上线下都很闹心 本着让大家都能开心的原则 在 培根 童鞋的要求下 刚好我对 maven 很熟 刚好我对公司遇到的依赖问题也很了解 写了此文档

大家好,我是讯享网,很高兴认识大家。

依赖管理
@http://bohr.me/dependency-management/ 

项目依赖问题很让人头痛,也出了很多事故,线上线下都很闹心。本着让大家都能开心的原则?,在@培根童鞋的要求下,刚好我对maven很熟,刚好我对公司遇到的依赖问题也很了解,写了此文档。

请您带着一个大大的问号?阅读此文档.您可以把您遇到的依赖问题(此文档没有包含的)发给我,丰富案例库.您可以补充依赖检查中的不足之处,毕竟我个人的能力有限.您可以分享一些灰常有用的插件,方便大家.您可以谈谈您对依赖风险控制的想法.Help Me Help You!

一.依赖管理目标

  1. 此规范更新后,使用方不需要修改代码
  2. 规范开源jar包版本
  3. 检查传递依赖
  4. 检查项目classpath中是否有类名相同的依赖jar包
  5. 检查已知不能使用的jar包
  6. 定义常用插件
  7. 优化yjf-common-util依赖,不是每个项目都使用的包定义为provided,由项目自己引入

二.如何实现目标

1.创建公共父pom

  • 定义所有易极付项目都依赖的父pom com.yiji.yiji-parent
  • 此pom为SNAPSHOT
  • 此pom在dependencyManagement中定义常用jar包的版本
  • 此pom显示依赖yjf-common-util guava log
  • 此pom使用maven-enforcer-plugin来规范传递依赖,要求当前依赖的版本和传递依赖版本一样或者比传递依赖版本高(比如A->Cv1 ,A->D->Cv2,如果v1<v2,则打包失败)
  • 此pom使用maven-enforcer-plugin来规范引入会导致已知问题的包(比如我们的项目都使用slf4jlogback,那我们的依赖中不能出现org.slf4j:slf4j-log4j12)
  • 此pom使用com.yiji.maven.yiji-maven-plugin来检查classpath中是否有类名相同的jar包出现.如果有,在console中也会提示警告,在执行打包命令的目录生成dependency-check.log文件,此文件中会记录检查了哪些包.同时,以后我们也可以通过此日志文件来了解我们项目间的依赖情况.
  • 此pom包含常用maven插件maven-compiler-plugin maven-source-plugin maven-eclipse-plugin findbugs-maven-plugin maven-pmd-plugin方便大家日常使用
  • 此pom中的开源依赖,我会定期check是否有更新,是否有bug修复

2.开发com.yiji.maven.yiji-maven-plugin

此插件已开发完毕,代码也很简单,可以发现一些类加载顺序不一致导致的潜在的问题.

目前此插件只检查不同的jar包中是否有相同的类名.还可以增加对资源文件的检查,文件名相同还可以增加对内容的检查.这些需求如有必要,以后在加上.此插件也是SNAPSHOT的,以后我升级了,大家不用改动任何代码.

3.定制settings.xml

  • 此文件定义snapshot依赖为每次打包检查
  • 其他大多人不需要关心的东东

三.如何实施

目前已完成cs项目的改造,使用上面的东东,cs的pom文件还廋身不少.


讯享网

由于传递依赖,不敢贸然大规模推广,先选择被依赖较少的项目使用.和@培根商量,先选择boss项目\易融通项目\易房保项目使用,使用过程中出现任何问题,请联系我(也可以顺带请我喝茶)

如果这几个项目把雷踩完了,需要找一个统一的时间点,大家一起修改\测试\上线 四.如何搞

1.替换setting.xml

下载svn://192.168.45.206/common/yiji-parent/settings.xml,替换maven安装目录中的setting.xml

2.配置项目父pom

拿cs为例,在cs的父pom中加入

<parent> <groupId>com.yiji</groupId> <artifactId>yiji-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> 去掉dependencyManagement中的开源jar依赖(公司内部的依赖不要去掉, `com.yiji.yiji-parent`中没有定义这些东东)。检查项目中的开源依赖是否有版本号,如果有并且IDE提示重复的定义,去掉此版本号;如果没有提示,应该是在 `com.yiji.yiji-parent`里没有加入此依赖,请联系我。

讯享网
小讯
上一篇 2025-01-28 14:43
下一篇 2025-04-02 10:39

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/117333.html