目录
- 一、场景
- 二、私服上传命令
- 三、排查
- 四、原因
- 五、解决
一、场景
1、上传Jar包至私服(版本号不变)
2、Maven无法获取到最新的Jar包
二、私服上传命令
mvn deploy:deploy-file -Dmaven.test.skip=true -DgroupId=com.cae -DartifactId=cloudjdbc -Dversion=12.1.11 -Dpackaging=jar -Dfile=C:\Users\xxx\Desktop\xxxx\jar\cae-jdbc-12.1.11.jar -Durl=http://192.168.1.xxx:xxxx/repository/maven-releases/ -DrepositoryId=nexus-releases
三、排查
进入私服查看,该Jar包确实已经上传成功
四、原因
上传私服时,指定的仓库为releases
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,这样才能使用到你最新添加的功能。
五、解决
方法一:升级Jar包版本号
方法二:先删除本地仓库对应的依赖,再用maven获取