前言

项目使用的maven。
结构:
最上层有parent 然后下面有各个服务以及其相关的api

现在A服务(这个服务有点特殊,调用了很多其他的服务)修改了一些东西。
首先,在parent.xml添加了被调用服务的依赖,通过dependencyManagement来管理服务版本。
接着,在A服务加依赖。
修改完成后,我在jenkins打包了A服务的api,发布了A服务,结果发现jenkins提示A服务发布失败,提示版本错误,基本里面引入的各个依赖全部都报了这个提示

解决思路

首先,我是有想过可能是新加的依赖,导致的jar包版本冲突的可能的,但是看了下引入的地方,都是用exclusions对jar包进行了排除,只引入代码,所以这个方向是没问题的。
记着,尝试注释新加的依赖,以及其相关逻辑,重新发布,还是不行。

其实我是有想过是parent工程没打包的问题的,所以我尝试了下把本地parent打包,上传到nexus私服。再次尝试,还是显示错误。

这时,点击后台,发现可以调用A服务成功? 我看了下linux里面A服务的启动日志,发现是没有报任何错误的。最后,给旁边的大佬问了下,找了一下,看了发布日期,说是parent没发布。原来,还有个parent工程在jenkins…
最后,把parent工程重新发布下,就好了。

总结

下面是说下原因:

为什么本地打包了parent上传到私服nexus,jenkins上的A服务还是显示发布失败?

原因:jenkins在发布A服务前,对其进行 打包的时候,会根据引入的依赖以及其版本,去找其jar包。 这时候,如果打包的时候,已经有了需要的这个jar包,那么就不会去仓库下载。

下面挂出A服务引入的依赖:

jenkins处理当前请求时发生了错误 jenkins部署报错_上传


但是,因为这里没有版本信息,它的版本是通过parent来管理的。

拿着它去jenkins发布,在发布的时候,它去当前的parent里面取找这个依赖的相关信息以及其版本,是找不到的!所以,还是会报错误。

这里再说下项目打包发布时,找寻依赖的相关顺序:
首先,会先去本地已经打包过的maven里面找,如果没有,这时候才回去私服nexus进行下载!
因为jenkins发布A服务的时候,旧的parent存在,所以它当前最新的A服务使用的还是旧的parent,所以,就算本地把最新的parent上传到私服,还是无效的。
除非: 要么去服务器把本地的parent 依赖删掉(新旧版本没变的情况下),让A服务重新下载parent 的jar包;
要么是在A服务引入依赖的时候,直接写上版本号信息,不通过parent管理。
这两种都不会发生这种错误。