依赖管理
@http://bohr.me/dependency-management/
项目依赖问题很让人头痛,也出了很多事故,线上线下都很闹心。本着让大家都能开心的原则?,在@培根童鞋的要求下,刚好我对maven很熟,刚好我对公司遇到的依赖问题也很了解,写了此文档。
请您带着一个大大的问号?阅读此文档.您可以把您遇到的依赖问题(此文档没有包含的)发给我,丰富案例库.您可以补充依赖检查中的不足之处,毕竟我个人的能力有限.您可以分享一些灰常有用的插件,方便大家.您可以谈谈您对依赖风险控制的想法.Help Me Help You!
一.依赖管理目标
- 此规范更新后,使用方不需要修改代码
- 规范开源jar包版本
- 检查传递依赖
- 检查项目classpath中是否有类名相同的依赖jar包
- 检查已知不能使用的jar包
- 定义常用插件
- 优化yjf-common-util依赖,不是每个项目都使用的包定义为provided,由项目自己引入
二.如何实现目标
1.创建公共父pom
- 定义所有易极付项目都依赖的父pom
com.yiji.yiji-parent - 此pom为SNAPSHOT
- 此pom在
dependencyManagement中定义常用jar包的版本 - 此pom显示依赖
yjf-common-utilguavalog - 此pom使用
maven-enforcer-plugin来规范传递依赖,要求当前依赖的版本和传递依赖版本一样或者比传递依赖版本高(比如A->Cv1 ,A->D->Cv2,如果v1<v2,则打包失败) - 此pom使用
maven-enforcer-plugin来规范引入会导致已知问题的包(比如我们的项目都使用slf4j和logback,那我们的依赖中不能出现org.slf4j:slf4j-log4j12) - 此pom使用
com.yiji.maven.yiji-maven-plugin来检查classpath中是否有类名相同的jar包出现.如果有,在console中也会提示警告,在执行打包命令的目录生成dependency-check.log文件,此文件中会记录检查了哪些包.同时,以后我们也可以通过此日志文件来了解我们项目间的依赖情况. - 此pom包含常用maven插件
maven-compiler-pluginmaven-source-pluginmaven-eclipse-pluginfindbugs-maven-pluginmaven-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`里没有加入此依赖,请联系我。
讯享网

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