hadoop编译源码之Maven报错 Return code is: 501 , ReasonPhrase:HTTPS Required. -> [Help 1] 解决

本文介绍了如何解决Maven从2020年起仅支持HTTPS请求的问题。通过在settings.xml文件中添加mirror配置,将repository指向HTTPS地址,可以有效解决此问题。

背景:

出错如下

出错原因是2020年1月起maven只支持https请求。

解决方法:

在maven的settings.xml的mirrors标签中添加如下内容

<mirror>
    <id>repo1</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>https://repo1.maven.org/maven2/</url>
</mirror>

 重新执行maven命令即可。

<think>我们强制使用离线模式打包后,Maven无法从远程仓库下载任何依赖。报错信息显示多个依赖无法解析,因为Maven处于离线模式,且这些依赖之前没有从aliyunmaven仓库下载过(即本地仓库不存在这些依赖)。 解决思路: 1. 确保所有依赖已经存在于本地仓库(~/.m2/repository)。 2. 如果本地仓库缺少某些依赖,需要先联网下载这些依赖到本地,然后再离线打包。 3. 或者,如果项目允许,可以临时连接网络下载缺失的依赖,然后再离线打包。 具体步骤: 步骤1:检查本地仓库是否存在报错中提到的依赖(例如:org.apache.hadoop:hadoop-yarn-server-nodemanager:jar:2.7.3等) 步骤2:如果不存在,需要先联网下载依赖: 执行命令:`mvn dependency:resolve` 或者 `mvn install`(在联网状态下) 步骤3:下载完成后,再次尝试离线打包:`mvn package -o` 如果项目中有很多依赖,且不确定是否全部下载到本地,可以执行以下命令将项目所有依赖下载到本地仓库(在联网状态下): mvn dependency:go-offline 注意:`mvn dependency:go-offline` 会尝试下载所有依赖(包括插件依赖),但有时可能无法完全下载所有插件依赖,因此如果后续构建仍报错,可以尝试: mvn clean install -DskipTests # 在联网状态下完整构建一次,确保所有依赖和插件都被下载 然后再次离线打包。 如果由于网络问题无法连接到aliyunmaven,可以尝试更换仓库(例如使用公司的私有仓库或默认中央仓库)并重新下载依赖。 另外,检查Maven的settings.xml中是否配置了aliyunmaven仓库,如果配置了且该仓库无法访问,可以考虑暂时注释掉,使用其他可访问的仓库。 如果上述方法无效,考虑手动安装缺失的依赖: 找到缺失的jar包,手动下载,然后使用mvn install:install-file命令安装到本地仓库。 报错中提到的依赖列表: - org.apache.hadoop:hadoop-yarn-server-nodemanager:jar:2.7.3 - org.apache.hadoop:hadoop-auth:jar:2.7.3 - com.google.code.gson:gson:jar:2.8.9 - junit:junit:jar:4.13.1 - mysql:mysql-connector-java:jar:8.0.29 - org.springframework:spring-context:jar:5.3.15 - org.springframework:spring-beans:jar:5.3.15 - org.springframework:spring-jdbc:jar:5.3.15 手动安装示例(以hadoop-yarn-server-nodemanager为例): mvn install:install-file -Dfile=hadoop-yarn-server-nodemanager-2.7.3.jar -DgroupId=org.apache.hadoop -DartifactId=hadoop-yarn-server-nodemanager -Dversion=2.7.3 -Dpackaging=jar 但是手动安装每个依赖很麻烦,所以优先建议在联网状态下使用Maven下载。 总结:离线打包的前提是本地仓库已经包含所有依赖。因此,先确保联网下载所有依赖到本地仓库,再使用离线模式打包。 §§相关问题§§ 1. 如何检查Maven本地仓库中是否已存在特定依赖? 2. 除了`mvn dependency:go-offline`,还有哪些方法可以预先下载项目所有依赖? 3.Maven构建过程中,离线模式(-o)会忽略哪些类型的依赖? 4. 如何配置Maven使用多个仓库,并在其中一个不可用时自动切换? 5. 手动安装依赖到本地仓库时,如果依赖有pom文件或附属文件(如sources.jar),应该如何处理?</think>### 问题分析与解决方案 当强制离线打包(`mvn package -o`)时报错"artifact has not been downloaded before",说明**本地仓库缺少必要的依赖项**。Maven离线模式仅使用本地缓存,无法下载新依赖。以下是解决方案: --- ### 解决方法 #### 方案1:联网下载缺失依赖(推荐) 1. **临时禁用离线模式**: ```bash mvn dependency:resolve # 仅下载依赖不打包 # 或 mvn clean install -DskipTests # 完整构建但不运行测试 ``` 2. **重新离线打包**: ```bash mvn package -o ``` #### 方案2:手动安装缺失依赖 对每个报错的依赖执行(示例): ```bash mvn install:install-file \ -Dfile=hadoop-yarn-server-nodemanager-2.7.3.jar \ -DgroupId=org.apache.hadoop \ -DartifactId=hadoop-yarn-server-nodemanager \ -Dversion=2.7.3 \ -Dpackaging=jar ``` #### 方案3:配置镜像仓库(长期方案) 在`settings.xml`中添加阿里云镜像: ```xml <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云镜像</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> ``` #### 方案4:检查依赖范围 确认`pom.xml`中是否误将依赖设为`provided`: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29</version> <!-- 改为默认compile范围 --> <!-- <scope>provided</scope> --> </dependency> ``` --- ### 关键原因 1. **本地仓库不完整**:部分依赖从未下载过 2. **SNAPSHOT版本限制**:`1.1-SNAPSHOT`版本强制检查远程仓库 3. **依赖范围错误**:`provided`依赖不会打包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值