JDK6 だと https で Maven Central からライブラリなどをダウンロードができなくなった件

2018/08/18   #java  #maven 
このエントリーをはてなブックマークに追加

Facebook4J は mvnw を使っているのだが、
ビルドの最初に Maven 本体のダウンロードするところで失敗するようになっていた。
mvnw 使ってなくても、いずれにせよ各種ライブラリのダウンロードで同様のエラーになると思われる。

$ ./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
Downloading https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.2.1/apache-maven-3.2.1-bin.zip

Exception in thread "main" 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:1902)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1074)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1320)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1347)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1331)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:432)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1278)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
	at org.apache.maven.wrapper.DefaultDownloader.downloadInternal(DefaultDownloader.java:73)
	at org.apache.maven.wrapper.DefaultDownloader.download(DefaultDownloader.java:60)
	at org.apache.maven.wrapper.Installer.createDist(Installer.java:64)
	at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:121)
	at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:60)

これは Maven Central が TLS 1.1 のサポートをやめて 1.2 対応になったことが原因。
で、JDK6 は TLS 1.2 をサポートしていないので、JDK6 を使って Maven Central から https でダウンロードすることが不可能になってしまった。。

Discontinued support for TLSv1.1 and below

JDK7 であれば、

-Dhttps.protocols=TLSv1.2

を引数に指定すれば対応できるみたいでした。が、JDK6 はできない。

幸いにも http でのダウンロードは大丈夫みたいなので、http を指定してみる。
mvnw の場合、 .mvn/wrapper/maven-wrapper.propertiesdistributionUrl を以下のように http に書き換える。

distributionUrl=http://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.2.1/apache-maven-3.2.1-bin.zip

これで JDK6 でもダウンロードに失敗することはなくなる。