如何配置Maven 3.8.x将pom.xml下载失败视为警告而非错误
Maven 3.8.0 版本对依赖解析逻辑做了默认行为调整:POM文件(父POM、依赖POM)下载缺失、传输失败时默认判定为构建错误直接终止,这也是3.6.x升级后最常见的兼容性问题。可通过以下任意一种方案解决:
方案1:加启动参数关闭POM缺失失败判定
单次执行构建时直接在命令后追加参数:
mvn 你的构建目标(比如clean package/install) -Dmaven.modelBuilder.failOnMissingPom=false
单项目永久生效:在项目根目录新建.mvn/maven.config文件,写入以下内容即可,不需要每次执行命令手动加参数:
-Dmaven.modelBuilder.failOnMissingPom=false
全局生效:在用户目录下新建.mavenrc文件(Windows为mavenrc_pre.bat),写入上述参数,本机所有Maven项目都会默认加载该配置。
方案2:修复HTTP仓库被默认拦截的问题
Maven 3.8.1+默认新增了HTTP仓库拦截规则,所有非HTTPS的外部仓库都会被直接拦截导致POM下载失败,这也是绝大多数遗留依赖构建失败的核心原因。
找到Maven配置文件:全局配置在Maven安装目录的conf/settings.xml,用户级配置在用户目录的.m2/settings.xml,找到<mirrors>节点下自带的maven-default-http-blocker配置,直接注释掉即可:
<mirrors> <!-- 注释默认HTTP拦截规则,适配内部/遗留HTTP仓库 --> <!-- <mirror> <id>maven-default-http-blocker</id> <mirrorOf>external:http:*</mirrorOf> <name>Pseudo repository to mirror external repositories initially using HTTP.</name> <url>http://0.0.0.0/</url> <blocked>true</blocked> </mirror> --> </mirrors>
提示:公网项目不建议全局放开HTTP拦截,仅给可信的内部遗留仓库单独配置白名单即可,避免引入恶意依赖。
方案3:切回3.6.x版本同款传输器实现
Maven 3.8.x默认使用新版的Native传输器,和部分老版本私有仓库的认证、分片传输逻辑兼容性差,可以强制切回3.6.x默认使用的Wagon传输器,启动命令追加参数即可:
mvn 你的构建目标 -Dmaven.resolver.transport=wagon
该参数同样支持写入.mvn/maven.config或者.mavenrc做永久配置。
配置完成后重新执行构建,遇到POM下载失败场景时Maven仅会打印WARN级别日志,不会中断构建流程,本地已存在的遗留依赖可正常参与构建,行为和3.6.x版本完全一致。
内容的提问来源于stack exchange,提问作者willy

