maven mvn install 报错 Received fatal alert: protocol_version 解决方案
1 背景
今天我们一个小伙伴同事说, eclipse 项目运行 maven install , 下载 maven maven-surefire-plugin 插件时候报错,控制台提示信息:
Failed to read artifact descriptor for org.apache.maven.surefire:surefire-api:jar:2.20.1: Could not transfer artifact org.apache.maven.surefire:surefire-api:pom:2.20.1 from/to central (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version -> [Help 1]
使用 mvn install -X 显示详细的错误信息如下:
Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086) ... 34 more [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginReso
2. 原因
由于TLSv1.1 协议不安全, 出于PCI 安全标准的原因, 从2018-06-18起, maven Sonatype 中央仓库不再支持 TLSv1.1 以及以下的协议版本,原文参见 no longer supports TLSv1.1 and below 官方说明
通过chrome security 面板看到, maven 中央仓库已经是 TLSv1.2 协议了
由于我的同事, 使用的 jdk 是 1.7 , jdk1.7虽然支持TLS 1.2 但是默认是 disabled的, 所以就会出现上面的 Received fatal alert: protocol_version 异常
下表格是 根据Oracle文档 各版本JDK默认使用的TLS协议:
JDK 8 (March 2014 to present) |
JDK 7 (July 2011 to present) |
JDK 6 (2006 to end of 2013) |
|
TLS Protocols |
TLSv1.2 (default) TLSv1.1 TLSv1 SSLv3 |
TLSv1.2 TLSv1.1 TLSv1 (default) SSLv3 |
TLS v1.1 (JDK 6 update 111+) TLSv1 (default) SSLv3 |
3. 解决方案
方案1 : 使用 http 去访问 maven 中央仓库 (中央仓库自2020-1-15日起,不支持http了 https://support.sonatype.com/hc/en-us/articles/360041287334)
对于安全要求不严格的场景, 可以使用http 去访问maven 仓库
对于 plugin , 可以在 setting .xml 加入或者改成如下:
<pluginRepositories> <pluginRepository> <id>central</id> <url>http://repo1.maven.org/maven2</url> </pluginRepository> </pluginRepositories>
下面是相关位置代码:
<profiles> <profile> <id>maven-home</id> <repositories> <repository> <id>central</id> <url>https://repo1.maven.org/maven2</url> <releases> <enabled>true</enabled> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://repo1.maven.org/maven2</url> </pluginRepository> </pluginRepositories> </profile>
方案2 : 升级 JDK 到8
JDK8 TLS 1.2 默认是 enable ,不会出现这个异常
PS: 这个代价可以有点大, 尤其是一些老的项目, 不是说升就可以升的
方案3: 通过添加 -Dhttps.protocols=TLSv1.2 , 配置 java runtime 参数,来 enable TLS 1.2
如果你是JDK 1.7 (尤其是 1.7.0_131-b31 以前的版本)你可以使用以下command line:
mvn -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2 <goals>
或者在相关脚本中加入:
export MAVEN_OPTS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
如果你是 1.6 的版本, sorry , 只能使用http 模式, 虽然有部分jdk 1.6 小版本声称支持 TLS 1.2,参见
Changes in 6u115 b32 TLS v1.2 support now available
4. 参考
https://central.sonatype.org/articles/2018/May/04/discontinued-support-for-tlsv11-and-below/
相关推荐
Maven install 报错"程序包不存在"问题的解决方法 Maven install 报错"程序包不存在"问题是 Maven 项目开发中常见的问题之一。当我们在使用 Maven 进行项目构建时,可能会遇到"程序包不存在"的错误信息,这种错误...
遍历文件夹及子文件夹下得pom文件,自动清理、编译、安装。适合批量编译多个maven工程
mvn install:install-file -DgroupId=nl.jworks.markdown_to_asciidoc -DartifactId=markdown_to_asciidoc -Dversion=1.0 -Dpackaging=jar -Dfile=C:\Users\lizz\Downloads\markdown_to_asciidoc-1.0.jar
《Maven基础使用手册》是针对初学者的一份详尽指南,旨在帮助用户从零开始掌握Maven的基本操作。这份手册以实例与图解相结合的方式,使得学习过程更为直观易懂。 一、获取Maven支持 1. 访问官方网站:在学习Maven...
遵循这些步骤,你应该能够解决报错并成功执行`maven install`。在Spring Boot项目中,保持良好的代码组织和明确的主类定义是避免此类问题的关键。同时,定期更新依赖和遵循最佳实践也有助于维持项目的稳定性和可维护...
spring-petclinic-master运行mvn install报错:Failed to execute goal io.spring.javaformat:spring-javaformat-maven-plugin:0.0.19:validate (default) on project spring-petclinic: Formatting violations ...
mybatis自动生成数据库代码工具_使用命令:mvn_mybatis-generatorgene_mybatis-maven
7. 依赖管理和解决冲突: - Maven使用传递性依赖管理,一个项目依赖的库可能间接依赖其他库,Maven会自动处理这些依赖关系。 - 当出现依赖冲突时,可以通过 `<dependencyManagement>` 标签进行统一管理,或者使用 ...
下载之后再maven的bin目录下使用mvn命令:mvn install:install-file -Dfile=F:\apache-maven-3.5.3\mylib\olap4j-0.9.7.309-JS-3.jar -DgroupId=org.olap4j -DartifactId=olap4j-0.9.7.309-JS-3 -Dversion=0.9.7.309...
IDEA中Maven依赖包报错的问题解决方案汇总.docx
主要介绍了关于maven打包时的报错: Return code is: 501 , ReasonPhrase:HTTPS Required,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
- **常用Maven命令**:如`mvn clean`清理项目,`mvn compile`编译源代码,`mvn package`打包项目,`mvn install`将项目安装到本地仓库,`mvn test`运行测试。 3. **Linux运维**: - **权限管理**:理解Linux的...
安装 Maven 之前要求先确定你的 JDK 已经安装配置完成。Maven是 Apache 下的一个项目,目前最新版本是 3.0.4,我用的也是这个。 首先去官网下载 Maven:...
Apache Maven和TIBCO ActiveMatrix BusinessWorks:trade_mark:和TIBCO BusinessWorks:trade_mark... 可以通过从终端/命令提示符运行命令mvn -version来确认。 应该安装TIBCO ActiveMatrix BusinessWorks:trade_mark:或
自定义一个插件,继承AbstractMojo,实现execute方法,引入该自定义插件,执行mvn install,报错 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default -...
Maven3.5.0安装与配置 Maven3.5.0的安装 将下载后的apache-maven-3.5.0-bin.zip解压,如“g:\java\maven\apache-maven-3.5.0”下,尽量不要安装到“c:\”下,以免各种奇怪的问题发生。... mvn -version或者mvn -v
Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project
6. **清理和更新Maven仓库**:执行`mvn clean`和`mvn dependency:purge-local-repository`可以清除本地仓库的旧文件,然后`mvn install`或`mvn update`来获取最新的依赖。 7. **Maven的settings.xml配置**:检查`...
Tomcat、Maven与JDK版本对应关系以及JDK、Tomcat、Maven的安装及配置 在Java开发中,JDK、Tomcat和Maven是三个基本组件,这三个组件的版本对应关系是非常重要的。在本文中,我们将介绍Tomcat、Maven与JDK版本对应...