关于MAVEN-快照版本SNAPSHOT的工作原理

问题

最近公司需要在Maven私服上部署一个共享项目,作为一个公共Jar包的项目。
而项目会经常修改,每次修改都是用一个版本号1.0.0-RELEASE,
并且通过mvn deploy 发布 版本上去MAVEN私服。
但发现引用这个版本的其他项目每次mvn 编译的时候总是获取不到最新改动。

原因

MAVEN 有RELEASE版本 跟 SNAPSHOT版本机制:

  1. RELEASE版本机制
    先检查本地仓库是否有依赖的包,如果没有就去中央仓库或远程私有仓库进行下载。如果本地仓库已经有的话,不论远程私有仓库(MAVEN私服)是否有更新都不进行下载,除非把本地仓库的文件删除掉。(即使在编译的时候加参数-U也没效果)

  2. 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>
    原文作者:爱蛇
    原文地址: https://www.jianshu.com/p/7e8e67205b97
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞