前言
我们知道maven包的版本有两类,一类是 SNAPSHOT,一类是 RELEASE。
这两类有个重要的区别,RELEASE 的包需要改 pom.xml 中的 <version>
的时候才会引入其他版本(如新版本),但是 SNAPSHOT 允许不改 <version>
而引入新版本(自动通过时间戳判断)
那 SNAPSHOT 是怎么做到的呢? SNAPSHOT 就是为了应对 “被依赖者频繁改版本号导致依赖者需要频繁修改pom.xml的版本” 的问题。例如A依赖B,B在开发过程中,所以B肯定是经常变动的,每次变动时都得通知A修改版本,会疯掉的。如果B是SNAPSHOT版本,B更改后,A并不需要修改pom.xml中的版本就可以不断拉取到B的更新。
但是有个问题,B虽然是SNAPSHOT的,但是maven或者说IDE(Eclipse或IDEA)并不是非常频繁去拉取更新,据说 是按天拉取的。比如你项目依赖的这个jar是今天下载的,接着有人推了新版jar到私库,要等到明天才会检查到本地的jar的时间戳落后于私库上的,因此这种按天的触发频率太慢了,如何手动触发? 见下文
触发更新SNAPSHOT
如何手工触发拉取最新的SNAPSHOT版本的jar? 方法有:(详细参考后文)
-
使用
-U
参数。在命令行或 IDEA 里执行mvn clean compile -U
即可触发重新拉取 -
配置IDE,以 IDEA 为例,在设置中勾上
Always update snapshots
,在手工点击右侧Maven的刷新按钮即可触发 -
改 maven的 settings.xml文件(详细见后)
-
手工删除本地仓库的jar包,并点击 IDEA 右侧Maven的刷新按钮触发重新拉取s
详细方法和步骤
1. 使用 -U
-
使用
mvn clean compile -U
来实现拉取最新的snapshot版本的jar* 除了用compile,你也可以用其他的,比如 mvn clean package/install/deploy -U * 最好还是要有 clean,避免不必要的麻烦,不要把clean省略 * 追加其他参数也行,比如 mvn clean compile -U -e mvn clean compile -U -e -B -B:使用批处理模式构建项目,能够避免一些需要人工参与交互而造成的挂起状态。 -e:如果构建出现异常,该参数能让maven打印完整的stack trace,进而可以方便定位问题。
-U
是强制检查的意思,-U并不是每次都会拉最新的,只有在时间戳落后于私库上的jar的时候才会下载最新- 注意一下
-U
,检查的是时间戳是否落后,并不是日期是否落后,时间戳是更加精确的。如下20200821.101436-8
就是时间戳
- 感觉这种方式有个缺点,项目如果编译不过,用这个方式是不是就无法执行这个命令了?
2. 配置IDEA
-
使用idea的,勾上 “Always update snapshots”
idea 默认是没有勾上的
如下图所示:
3. 配置 settings.xml
参考 Maven 3.6.0 settings.xml
修改settings.xml,在 repository 和 pluginRepository 下配置总是更新Maven snapshots依赖:
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
值说明:
enabled
: Whether to use this repository for downloading this type of artifact. Default value is:true
.updatePolicy
: The frequency for downloading updates – can be “always”, “daily” (default), “interval:XXX” (in minutes) or “never” (only if it doesn’t exist locally). Each repository in the project has its own update policy:- always – always check when Maven is started for newer versions of snapshots
- never – never check for newer remote versions. Once off manual updates can be performed.
- daily (default) – check on the first run of the day (local time)
- interval:XXX – check every XXX minutes
4. 删除私库中的jar
手工删除本地仓库的jar,点击maven的刷新按钮即可触发重新拉取
参考文档
https://blog.csdn.net/nklinsirui/article/details/106275080
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135256.html