ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

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