问题
最近公司需要在Maven私服上部署一个共享项目,作为一个公共Jar包的项目。
而项目会经常修改,每次修改都是用一个版本号1.0.0-RELEASE,
并且通过mvn deploy 发布 版本上去MAVEN私服。
但发现引用这个版本的其他项目每次mvn 编译的时候总是获取不到最新改动。
原因
MAVEN 有RELEASE版本 跟 SNAPSHOT版本机制:
RELEASE版本机制
先检查本地仓库是否有依赖的包,如果没有就去中央仓库或远程私有仓库进行下载。如果本地仓库已经有的话,不论远程私有仓库(MAVEN私服)是否有更新都不进行下载,除非把本地仓库的文件删除掉。(即使在编译的时候加参数-U也没效果)SNAPSHOT版本机制:
可以先参考一下这个文章:
https://www.cnblogs.com/EasonJim/p/6852840.html
文章里提到执行命令的时候增加 -U就可以强制更新SNAPSHOT版本的依赖:
mvn clean compile -U
## 这个-U 参数,本人亲自测试过,只对SNAPSHOT版本有效
但实际情况是,有开发人员是不懂这个东西,所以就不得不考虑使用默认方式去强制更新。
解决方法
后来找到在仓库配置里增加一个更新策略的配置updatePolicy,在项目POM文件里增加仓库,并且配置仓库的updatePolicy为always就可以了:
<repositories>
<repository>
<id>nexus-public</id>
<name>nexus-release</name>
<url>http://XXXXXXX/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>