概述
本文介绍如何玩转 Maven, 可以说是 Maven 库的使用规范
一、release库(发布库)使用规则及场景
release库是存放稳定版本包的仓库,线上发布的程序都应从release库中引用正确版本进行使用
私服中release库使用规则如下:
- release库不允许删除jar;
- release库不允许同版本更新jar包(即同一个版本jar包只存在一个);
- release库上传的jar包版本号(version)不能以“-SNAPSHOT”结束(版本号中的SNAPSHOT是release版和snapshot版区别的唯一标识);
- 第三方包(非公司内部开发)仅可引用release版
- 如可能,请提供接口对应源码,方便引用方使用
release库使用场景:
根据上述release库的使用规则可知,若在开发过程中引用的不是release版的库,很有可能因为jar包更新后引用方不知道而引起代码错误,所以在如下场景场景中,请使用release仓库:
上传/发布:
- 当代码构建出的jar需要给其他程序提供服务时;当第三方提供的jar包或其他类型的依赖包不在远程中央仓库中时;请将正式发布版的jar用命令deploy或者在web端手动上传至私服对应的release仓库。
- 如果是jar包提供方,请在代码变动时及时更新私服中对应的jar包版本,并联系管理员将淘汰jar包下线,以免引起引用事故;并及时更新发布包releasenotes(推荐在WIKI中维护),使引用方及时获取版本更新信息。
下载/依赖:
- 当代码需要使用第三方包时,除非对方代码仍在开发过程中,否则请选择三方包的正式release(发布)版本
- 如提供方是公司内部其他系统,并且该系统未提供release版本包,请主动要求该系统负责人提供release版本包,以保证开发代码版本稳定,并且关注该包的版本升级情况
二、snapshot库(快照库)使用使用规则及场景
snapshot库是存放中间版本包的仓库,代表该库中jar包的程序处于不稳定状态。当代码在开发过程中有其他程序需要引用时,可以提供snapshot版jar包用于调试和测试。由于snapshot库的包依然处于测试状态,所以随时可以上传同版本最新包来替换旧包,基于这种不稳定状态,maven允许snapshot库中的包被编译时随时更新最新版,这就可能会导致每次打包编译时同一个版本jar会包含不同的内容,所以snapshot库中的包是不能用来发布的。
私服中snapshot库使用规则如下:
- 快照库可以删除jar
- 快照库可以同版本更新jar包
- 第三方包(非公司内部开发)不允许引用快照版
- 快照库仅可用来联调测试环节使用,不建议用于线上的稳定发布版本
- 快照库上传的jar包版本号(version)必须以“-SNAPSHOT”结束,并上传至私服后系统将自动将“-SNAPSHOT”替换为时间戳串(本地代码引用时依然用“-SNAPSHOT”结束的版本号,无需替换时间戳),一个快照包线上将存在至少两个版本
snapshot库使用场景:
根据上述snapshot库的使用规则可知,snapshot版的包仅供中间过程以供临时引用,若在最终发布过程中引用,很有可能因为jar包被更新或者未更新而引用方不知道而引起代码错误,所以请仅在如下场景场景中使用snapshot仓库:
上传/发布:
- 当开发中的代码构建出的jar需要给其他程序提供服务时,请将snapshot版的jar用命令deploy或者在web端手动上传至私服对应的snapshot仓库。
下载/依赖:
- 当代码需要使用其他开发过程中代码的jar包时,请依赖该包的snapshot(快照)版本。maven类型工程使用过程中请使用“-U”强制更新命令,来获取最新版本包。
三、常见问题
① 上传jar包后,编译时发现代码找parent包,但是私服找不到jar,而且代码中也不需要这个parent
原因: 问题多发于web端上传jar包时,自动生成pom.xml 文件中自带节点
解决: 用web端上传时,请注意自行删除节点配置。
② 下载不了最新snapshot版本的jar包
原因: 发布snapshot版本未连同对应的pom一起发布,只有jar包,没有pom,在maven编译时候会直接报错pom找不到,或者因jar包未更新编译报错。
解决: 重新连同jar包一起发布即可解决。
③ 译后jar包变多或变少
原因: 编译环境中传递依赖引用的快照包版本低,引用了错误版本的包进入代码。
解决:
- 使用如下命令,检查依赖树,确定是哪个包引用到错的版本:mvn dependency:tree;
- 清除编译环境未更新的错误包,重新编译。
666 彩蛋
刚开始写博客, 希望大家支持, 如果有没疑问或不清楚的地方可以留言噢!
下周再见~