idea maven拉取报错failed to transfer from http://0.0.0.0/ during a previous attempt

本文指导如何修改~/.m2/settings.xml文件,将不安全的http镜像替换为https,确保仓库访问的安全性。步骤包括查找并替换http为https,以增强数据传输的加密和安全性。

  

1.修改 ~/.m2/settings.xml

<mirror>
  <id>insecure-repo</id>
  <mirrorOf>external:http:*</mirrorOf>
  <url>http://www.ebi.ac.uk/intact/maven/nexus/content/repositories/ebi-repo/</url>
  <blocked>false</blocked>
</mirror>
2.把http改成https

<think>我们遇到了一个Maven构建错误,主要原因是Maven 3.8.1版本开始默认阻止了HTTP仓库(非HTTPS)。而错误信息中显示尝试从http://0.0.0.0/(这是一个无效地址)和http://maven.aliyun.com(阿里云仓库的HTTP地址)下载依赖,但被阻止。 ### 问题原因 1. **Maven 3.8.1+ 的安全策略** 从 Maven 3.8.1 开始,所有 HTTP 仓库默认被阻止([官方说明](https://maven.apache.org/docs/3.8.1/release-notes.html#cve-2021-26291)),仅允许 HTTPS 仓库。 2. **仓库配置问题** - 项目中可能配置了使用阿里云的 HTTP 仓库(`http://maven.aliyun.com/...`) - 或者本地仓库缓存了旧的无效记录(尝试从 `http://0.0.0.0/` 下载) ### 解决方案 #### 方法一:升级仓库地址为 HTTPS(推荐) 将阿里云仓库地址改为 HTTPS: ```xml <repository> <id>aliyun</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url> </repository> ``` #### 方法二:临时允许 HTTP(不推荐,仅测试环境) 在 Maven 的 `settings.xml` 中覆盖安全策略(添加 `mirror` 或修改仓库配置): ```xml <mirror> <id>aliyun-http-unblock</id> <mirrorOf>external:http:*</mirrorOf> <name>Unblock HTTP Repositories</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <!-- 注意:此方案仅用于临时绕过,HTTPS才是安全的 --> </mirror> ``` 或者显式允许 HTTP 仓库(在 `settings.xml` 的 `<profiles>` 中): ```xml <profile> <id>allow-http</id> <repositories> <repository> <id>insecure-repo</id> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> </profile> <activeProfiles> <activeProfile>allow-http</activeProfile> </activeProfiles> ``` #### 方法三:强制更新本地缓存 运行以下命令强制 Maven 更新依赖(忽略缓存): ```bash mvn clean install -U ``` 若仍失败,删除本地仓库中 `com/jfinal/jfinal/6.1.0` 目录,再执行 `mvn -U`。 ### 预防措施 - **永久修复**:将所有仓库地址升级为 HTTPS。 - **检查 settings.xml**:确保未使用 HTTP 仓库镜像。 --- ### 错误日志分析关键点 - `Blocked mirror for repositories: [aliyun (...)`: 表明阿里云仓库因 HTTP 被阻止。 - `resolution is not reattempted until...`: 本地缓存了错误,需强制刷新(`-U`)。 > ⚠️ **安全提示**:长期解决方案是迁移到 HTTPS,避免中间人攻击。 §§相关问题§§ 1. Maven 3.8.1 及以上版本为什么默认阻止 HTTP 仓库? 2. 如何检查项目中所有 Maven 仓库是否都支持 HTTPS? 3. 使用阿里云 Maven 仓库时,除了 public 仓库还有哪些常用仓库配置? 4. 如果私有仓库仅支持 HTTP,如何在 Maven 3.8.1+ 中安全地配置使用? 5. 执行 `mvn -U` 命令时,Maven 会强制更新哪些类型的依赖? </think>### Maven 构建失败原因及解决方案 #### 核心问题分析 1. **HTTP 仓库被阻断** Maven 3.8.1+ 默认禁止访问 HTTP 仓库(安全策略),而阿里云仓库配置为 `http://maven.aliyun.com...` 2. **本地缓存锁定** 首次下载失败后被缓存锁定,需强制刷新或修改配置才能重试 3. **无效仓库地址** 错误日志显示尝试从 `http://0.0.0.0/` (无效地址) 下载 --- ### 完整解决方案 #### 方案一:升级仓库地址为 HTTPS (推荐) 修改 Maven `settings.xml` 将阿里云仓库协议升级: ```xml <mirror> <id>aliyun</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url> <!-- 关键修改 --> <mirrorOf>central</mirrorOf> </mirror> ``` #### 方案二:强制刷新本地缓存 命令行执行: ```bash mvn clean install -U --update-snapshots # 若仍失败,手动删除本地仓库中的 jfinal 缓存: rm -rf ~/.m2/repository/com/jfinal ``` #### 方案三:允许 HTTP 仓库 (临时方案) 在 `settings.xml` 添加安全例外 (不推荐): ```xml <settings> <mirrors> <mirror> <id>maven-default-http-blocker</id> <mirrorOf>!aliyun</mirrorOf> <!-- 排除阿里云 --> <url>http://0.0.0.0/</url> </mirror> </mirrors> </settings> ``` #### 方案四:检查 POM 配置 确保项目 `pom.xml` 未覆盖仓库配置: ```xml <!-- 正确配置示例 --> <repositories> <repository> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> </repository> </repositories> ``` --- ### 预防措施 1. **永久修复** 全局替换所有 `http://maven.aliyun.com` 为 `https://` 2. **版本兼容检查** ```bash mvn -v # 确认 Maven ≥ 3.8.1 ``` 3. **IDE 配置同步** IntelliJ/Eclipse 需刷新 Maven 配置 (右键项目 → Maven → Reimport) > ⚠️ **安全提醒**:长期解决方案必须使用 HTTPS,HTTP 仓库可能被中间人攻击
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值