我在sts和idea中配置了同一个maven和同一个依赖库,为什么sts中不会报错可以运行,但是idea中Non-resolvable parent POM for com.zttech:zttech-demo-cloud:0.0.1: The following artifacts could not be resolved: com.zttech:zttech-cloud-starter:pom:1.0.0 (absent): com.zttech:zttech-cloud-starter:pom:1.0.0 failed to transfer from https://0.0.0.0/ during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of maven-default-http-blocker has elapsed or updates are forced. Original error: Could not transfer artifact com.zttech:zttech-cloud-starter:pom:1.0.0 from/to maven-default-http-blocker (https://0.0.0.0/): Blocked mirror for repositories: [nexus-repos (http://maven.ningbosteel.com.cn/nexus/content/groups/public/, default, releases+snapshots)] and 'parent.relativePath' points at wrong local POM 无法访问 Maven 3.8.1 http 仓库。 可能的解决方案: - 检查 Maven settings.xml 是否不包含 http 仓库 - 检查 Maven pom 文件是否不包含 http 仓库 http://maven.ningbosteel.com.cn/nexus/content/groups/public/ - 在 Maven settings.xml 中为 http://maven.ningbosteel.com.cn/nexus/content/groups/public/ 添加允许 http url 的镜像 - 在设置中将 Maven 降级到 3.8.1 或更早的版本
时间: 2025-04-07 17:01:16 浏览: 85
<think>好的,我现在需要帮助用户解决在IDEA中遇到的Maven依赖问题。用户提到在STS和IDEA中配置了相同的Maven和依赖库,但IDEA报错,而STS正常。首先,我得理解问题所在。
错误信息显示父POM无法解析,特别是zttech-cloud-starter的1.0.0版本。错误提到无法从https://0.0.0.0/传输,并且被maven-default-http-blocker阻止了。同时,仓库nexus-repos使用的是HTTP协议,这在Maven 3.8.1及以上版本默认被阻止了。
用户可能已经知道Maven 3.8.1开始默认阻止HTTP仓库,但STS可能使用的是旧版Maven,而IDEA用了新版。所以首先需要确认用户IDEA中实际使用的Maven版本和配置文件是否正确。
可能的解决步骤包括:
1. 检查Maven版本:用户是否在IDEA中配置了正确的Maven路径,或者IDEA内置的Maven是否为3.8.1以上。如果用户确实用的是3.8.1,可能需要降级到3.8.1以下,或者调整配置。
2. 检查settings.xml:用户可能在settings.xml中配置了HTTP镜像或仓库,需要确认是否如此。Maven 3.8.1默认的settings.xml有一个http-blocker镜像,会拦截HTTP请求。
3. 检查pom.xml中的仓库配置:项目中的pom.xml可能显式引用了HTTP仓库http://maven.ningbosteel.com.cn/...,这需要替换成HTTPS,或者在settings.xml中覆盖。
4. 强制更新依赖:可能因为之前的错误被缓存,需要清除本地仓库中的相关依赖,或者使用-U参数强制更新。
5. 处理父POM的相对路径:如果父POM在本地项目中,可能需要设置<relativePath>正确路径,避免Maven错误地尝试从远程仓库获取。
需要一步步引导用户检查这些方面,尤其是确认settings.xml中是否有HTTP仓库配置,以及如何调整镜像设置允许HTTP。同时,提醒用户注意安全性,优先使用HTTPS仓库,如果确实必须用HTTP,再修改镜像配置。
另外,用户提到的解决方案中包括降级Maven,这也是可行的,但可能不是最佳实践。建议用户先尝试修改配置,而不是降级。另外,检查父项目的relativePath是否正确,有时候本地项目结构问题会导致Maven无法正确找到父POM,从而尝试从远程下载,引发错误。
总结下来,用户的问题根源在于Maven 3.8.1及以上版本对HTTP仓库的阻止,而STS可能使用了旧版本Maven,所以没有这个问题。解决方案围绕调整仓库配置、更新Maven设置、处理缓存等方面展开。</think>### 问题分析
这个错误的核心原因是 **Maven 3.8.1 及以上版本默认禁止使用 HTTP 协议的仓库**(出于安全考虑)。当你的项目或 Maven 配置中引用了 HTTP 仓库(如 `http://maven.ningbosteel.com.cn/...`),Maven 会强制拦截并报错。而 STS 可能使用的是旧版 Maven(3.8.1 之前),因此能正常运行。
以下是逐步解决方案:
---
### 第一步:检查 Maven 版本及配置文件
1. **确认 IDEA 使用的 Maven 版本**
在 IDEA 中依次打开:
`File → Settings → Build, Execution, Deployment → Build Tools → Maven`
检查 `Maven home path` 是否指向 **3.8.1 或更高版本**。
**如果是**,建议降级到 **3.6.x**(如 3.6.3)以绕过 HTTP 限制。
2. **检查 Maven 的 `settings.xml`**
找到 Maven 的 `conf/settings.xml` 文件,检查以下内容:
- 是否包含 `<mirror>` 配置,强制将 HTTP 请求重定向到 HTTPS(默认存在一个 `maven-default-http-blocker` 镜像)。
- 是否显式配置了 HTTP 仓库(如 `http://maven.ningbosteel.com.cn/...`)。
---
### 第二步:解决 HTTP 仓库被拦截的问题
#### 方案一:修改 `settings.xml`(推荐)
在 `settings.xml` 的 `<mirrors>` 部分,**注释或删除默认的 HTTP 拦截镜像**:
```xml
<!-- 注释掉以下镜像配置 -->
<!-- <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>
</mirror> -->
```
#### 方案二:允许特定 HTTP 仓库
如果必须使用 `http://maven.ningbosteel.com.cn/...`,在 `settings.xml` 中添加一个允许 HTTP 的镜像:
```xml
<mirror>
<id>allow-http-nexus</id>
<mirrorOf>nexus-repos</mirrorOf> <!-- 与仓库 ID 匹配 -->
<name>Allow HTTP for Nexus</name>
<url>http://maven.ningbosteel.com.cn/nexus/content/groups/public/</url>
</mirror>
```
---
### 第三步:检查项目 `pom.xml`
1. **检查父 POM 的仓库声明**
在项目的 `pom.xml` 中,检查是否显式引用了 HTTP 仓库:
```xml
<repositories>
<repository>
<id>nexus-repos</id>
<url>http://maven.ningbosteel.com.cn/nexus/content/groups/public/</url>
</repository>
</repositories>
```
**将 `http` 改为 `https`**(如果仓库支持 HTTPS)。
2. **处理 `parent.relativePath` 警告**
如果父 POM 是本地模块,在 `<parent>` 标签中添加 `<relativePath>`:
```xml
<parent>
<groupId>com.zttech</groupId>
<artifactId>zttech-cloud-starter</artifactId>
<version>1.0.0</version>
<relativePath>../zttech-cloud-starter/pom.xml</relativePath> <!-- 指向本地父模块路径 -->
</parent>
```
---
### 第四步:清理 Maven 缓存
1. **删除本地仓库中的失败记录**
找到本地 Maven 仓库中 `com/zttech/zttech-cloud-starter` 目录,删除整个 `1.0.0` 文件夹。
2. **强制更新依赖**
在 IDEA 的 Maven 工具栏中点击 `Reimport`,或命令行执行:
```bash
mvn clean install -U
```
---
### 总结
| 问题根源 | 解决方案 |
|---------|----------|
| Maven 3.8.1 默认拦截 HTTP | 降级 Maven 或修改 `settings.xml` |
| `pom.xml` 包含 HTTP 仓库 | 改用 HTTPS 或配置允许 HTTP 的镜像 |
| 本地缓存中存在失败记录 | 清理缓存并强制更新依赖 |
如果问题仍未解决,建议检查仓库 `http://maven.ningbosteel.com.cn/...` 的网络连通性,或联系仓库管理员升级到 HTTPS。
阅读全文
相关推荐

















