背景:
1、项目通过父pom定义dependencyManagement来进行版本管理,大概有上千个依赖吧~
2、所有业务工程,都需要依赖父pom获取统一的版本管理
3、父pom由于管理的依赖太多,且更新非常频繁。导致每次idea进行reimport后,都需要至少1个小时等待,开发效率太低
怎么解:
1、为啥我要reimport呢?肯定是需要引入某个依赖的新版本
2、为啥reimport后,那么慢呢?因为reimport会对父pom进行更新。由于父pom几乎时刻在更新,所以每次reimport几乎都有其他包要重新下载。
3、我不需要的包,可不可以不用下载。答案是可以的。
为了避免不需要包的下载,我们就不能更新父pom。为了避免更新父pom,我们修改setting文件。把<snapshots>的updatePolicy修改为never。
mvn会读父pom下的maven-metadata-xxx.xml,如果没读到回去远程仓库下载。所以,我们必须得保证该文件要有。
修改完setting后,所有snapshot包,同一个版本都不会再去远程进行比对拉取了。如果我们明确需要某一个包,可以执行:https://www.jianshu.com/p/5f097c3297f2,会单独拉取指定的最新包到本地仓库。
但是这个时候,虽然你把想要的包拉到本地仓库了,但是idea并不会感知到这个包。所以,需要你执行reimport导入到lib中。
下面简单说下思路:
1、修改setting文件,停止snapshot版本自动拉取最新包
2、修改自己想要更新依赖的版本(包升级不会被第1条影响)
3、单独拉取指定包,到本地仓库
4、执行reimport(已经停止snapshot更新,但是要修改的依赖已经被拉取到本地仓库,刚好解决)
========================
最佳实践:
1、mvn命令和idea的mvn,两个setting分开。mvn命令行的setting可以使用daily,目的是为了下载快一点。
2、idea的mvn,设置单独的setting。目的是为了让idea直接读取本地仓库,不要去远程拉取了,顺便把依赖import到项目的lib中