Maven解析5 您所在的位置:网站首页 maven拉取不到依赖 Maven解析5

Maven解析5

2023-04-01 04:54| 来源: 网络整理| 查看: 265

前言

maven为啥拉取不到最新修改的jar?

jar包上传私服仓错了,想重新上传怎么办?

 

解决方案

在上传第三方jar包到私服环境时,第一次上传成功后,突然发现上传的jar包有问题,但是因为已经指定了版本号,并且是release版本的jar包,因为不想更换版本号,所以再重复上传正确的jar包,就会出现如下错误:

一种解决办法是指定另外一个版本号 -DVerison=XXXX;另外一种方法是删除私服上的已上传的jar包,然后重新进行上传,首先登陆私服的管理台:

在搜索界面中输入想要删除的jar包,这里以"commons"为例,然后找到对应的group,对应版本号的jar包,点进去:

在左上角会有删除内容的按钮,点击后即可删除该jar包:

发现maven仓库中已经没有了相应的jar包,而后重新上传指定版本的第三方jar后,发现已经可以成功上传。

附:maven上传私服的命令:

mvn deploy:deploy-file -DgroupId=com.xxxx -DartifactId=commons -Dversion=45.0.91 -Dpackaging=jar -Dfile=E:\xxxx\biospace-commons.jar -Durl=http://xxxx:8081/repository/maven-releases/ -DrepositoryId=releases

 

事情还没完,当在本地重新打包项目时,发现引用的commons包还是之前的,去本地仓库中一看,jar包果然没法重新进行更新(现在是6.6号):

 

 

在这里解释一下release与snapshot版本的jar包,maven在下载依赖时所依赖的策略是不同的:

在Nexus仓库中,一个仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快照版本。如果在项目配置文件pom.xml中指定的版本号带有’-SNAPSHOT’后缀,比如版本号为’Junit-4.10-SNAPSHOT’,那么打出的包就是一个快照版本。

假设你依赖一个库的正式版本,构建的时候构建工具会先在本地仓库中查找是否已经有了这个依赖库,如果没有的话才会去远程仓库中去拉取。所以假设你发布了Junit-4.10.jar到了远程仓库,有一个项目依赖了这个库,它第一次构建的时候会把该库从远程仓库中下载到本地仓库缓存,以后再次构建都不会去访问远程仓库了。所以如果你修改了代码,向远程仓库中发布了新的软件包,但仍然叫Junit-4.10.jar,那么依赖这个库的项目就无法得到最新更新。你只有在重新发布的时候升级版本,比如叫做Junit-4.11.jar,然后通知依赖该库的项目组也修改依赖版本为Junit-4.11,这样才能使用到你最新添加的功能。

所以在我们团队开发时,最好采用Snapshot快照版本,倘若A依赖于B-SNAPSHOT.jar,这样在A构建时会优先去远程仓库中查看是否有最新的B-SNAPSHOT.jar,如果有则下载下来使用。即使本地仓库中已经有了B-SNAPSHOT.jar,它也会尝试去远程仓库中查看同名的jar是否是最新的。

为了避免在开发时候不断去拉取无用的快照版,充分利用本地Maven仓库的缓存机制,在配置Maven的Repository的时候中有个配置项(updatePolicy),可以配置对于SNAPSHOT版本向远程仓库中查找的频率。频率共有四种,分别是always、daily、interval、never。当本地仓库中存在需要的依赖项目时,always是每次都去远程仓库查看是否有更新,daily是只在第一次的时候查看是否有更新,当天的其它时候则不会查看;interval允许设置一个分钟为单位的间隔时间,在这个间隔时间内只会去远程仓库中查找一次,never是不会去远程仓库中查找(这种就和正式版本的行为一样了)。

myRepository ... true XXX i2/id> local private nexus http://mvnlib... true always true always warn default

其中updatePolicy就是那4种类型之一。如果配置间隔时间更新,可以写作interval:XX(XX是间隔分钟数)。daily配置是默认值。理解Maven中的SNAPSHOT版本和正式版本 - 黄博文的地盘 (huangbowen.net)

回到上面的问题,所以在上面已经更换正确版本的jar包本地或者打包服务器上的maven仓库仍然是旧版本的情况下有两种解决方法:1,删掉本地仓库的缓存,重新下载jar包;2,倘若无法接触到服务器上的maven本地仓库,那就只能更改jar的版本号重新引入新版本的jar包了。

(37条消息) Maven覆盖私服上的jar包,本地仓库无法更新的问题_段大人的博客-CSDN博客

本文来自博客园,作者:chch213,转载请注明原文链接:https://www.cnblogs.com/chch213/p/16339214.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有