背景:

目前业务使用的mvn打包机是业务线共享,在多个项目同时进行mvn install时,会出现依赖丢失,导致打包失败情况。


原因: 所有项目共用本地的 ~/.m2/repository, 多个项目在并发执行 mvn install 时,会导致本地缓存同时更新,造成部分依赖文件缺少,从而导致构建失败。


解决方案:

  1. 不使用本地缓存
    mvn clean install -U dependency:purge-local-repository
    Clean: 清理当前项目目录下的 */target 缓存目录 Install: 会安装依赖包,到公共的 local repository 。

缺点:每次都会去maven远程仓库拉取,影响构建效率。

  1. 设置服务级别独立的 local-repo
    mvn -Dmaven.repo.local=.m2/repository/

问题:因为业务存在长期不更新release版本的情况,而release版本又不会强制更新,所以如果local repo有对应的版本,则mvn不会从远程仓库拉取更新。这会造成代码不同步,从而导致打包失败,甚至是上线后业务异常。 解决:在执行mvn操作后,清空 .m2/repository/ 下部分二方目录,实现能拉取到最新二方包。

缺点:每次都会从远程仓库拉取依赖,效率会降低。