Java 7環境でのMavenのPluginがダウンロード失敗する
Java 7環境のMavenでダウンロードが行われない
環境を設定してもMavenの命令のダウンロード処理が失敗する事がある。
環境
現象
命令に対し、以下のように「Received fatal alert: protocol_version」になりダウンロードが失敗する。
C:\work\test>mvn archetype:generate [INFO] Scanning for projects... Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata.xml [WARNING] Could not transfer metadata org.apache.maven.plugins:maven-archetype-plugin/maven-metadata.xml from/to central (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version
原因
参考サイトにあるようにレポジトリへの接続には「TLS」というプロトコルを使うらしく、2018/06/18 からはTLSv1.0, 1.1はサポート外になったらしい
解決
Java7はデフォルトでTLSv1.0で通信するらしい、幸いにJAVA7はv1.2もサポートしているらしく、MavenでTSLを指定して実行することが可能だった
mvn -Dhttps.protocols=TLSv1.2 archetype:generate [INFO] Scanning for projects... Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata.xml Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata.xml (918 B at 0.4 KB/sec) Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/3.1.2/maven-archetype-plugin-3.1.2.pom Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/3.1.2/maven-archetype-plugin-3.1.2.pom (11 KB at 18.1 KB/sec) ...省略
自動化
少し探しづらいが、以下のファイルから一番長い行から、最後に「-Dhttps.protocols=TLSv1.2」をつけとけば常に適用される。 C:\apache-maven-3.3.9\bin\mvn.cmd
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
以下に修正
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%-Dhttps.protocols=TLSv1.2
参考
このサイトがすごく役に立った。
Java7 環境で maven が失敗する (Received fatal alert: protocol_version) - Qiita