【Gradle】「HTTP」からはじまるリポジトリを指定した場合にエラーとなる場合の解決方法の紹介

今回は、「Gradle」の「repositories」に「HTTP」からはじまるURLを指定しているとき、ビルドなどが失敗して次のエラーが発生した場合の原因と解決方法を紹介していきます。

The supplied phased action failed with an exception.
Could not resolve all dependencies for configuration ':compileClasspath'.
Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository 'maven(http://example.domain)' to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/7.0/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details.

「build.gradle」の設定例は、次のようになります。「url」の指定が「http」になっています。

...
repositories {
  maven {
    url 'http://example.domain'
  }
}
...
スポンサーリンク

検証環境

検証に使用した環境/ライブラリを次に記載します。

  • Java
    • バージョン:11
  • Gradle
    • バージョン:7.0
    • バージョン:6.8.3

原因

「Gradle」では、2020年1月以降からHTTPでアクセスしているサービスを順次廃止しています。「HTTP」を使用している通信では、悪意のある攻撃者により盗聴、改ざんなどのセキュリティの問題が発生する可能性があるためです。

gradle-blog-primary-dark
Starting in January 2020, Gradle services will only serve requests made with HTTPS. From that point on, all requests made with HTTP will be denied and any build...

検証環境では、「HTTP」からはじまるリポジトリを指定した場合は、次のような結果になりました。

バージョン処理結果
6.8.3正常終了
7.0異常終了
「Gradle」で「HTTP」からはじまるリポジトリを指定した場合の動作についての検証結果

検証結果から、「処理結果」が「異常終了」となるバージョンから「HTTP」を使用した場合は、エラーとなるような動作になっているようです。

解決方法

「Gradle」のバージョン6.0から追加された次のオプションを使用することで、「HTTP」を使用している場合でもエラーを回避できるようになります。

boolean allowInsecureProtocol

このオプションは、「HTTP」を使用している場合にリポジトリと通信できるかどうかを指定するために使用することができます。詳細のドキュメントについては、次の公式サイトのドキュメントを確認してください。

MavenArtifactRepository - Gradle DSL Version 6.0

「build.gradle」の設定例は、次のようになります。「allowInsecureProtocol」に「true」を設定しています。

...
repositories {
  maven {
    url 'http://example.domain'
    allowInsecureProtocol true
  }
}
...

まとめ

「Gradle」の「repositories」に「HTTP」からはじまるURLを指定しているとき、エラーが発生したときの原因と解決方法を紹介しました。

参考資料

「Gradle」の「HTTP」サービス廃止について

gradle-blog-primary-dark
Starting in January 2020, Gradle services will only serve requests made with HTTPS. From that point on, all requests made with HTTP will be denied and any build...

「Gradle」の「HTTP」を利用するときの「repositories」の設定例について

Gradle 6.0 Release Notes

「Gradle」の「repositories」に指定できる情報について(APIドキュメント)

MavenArtifactRepository - Gradle DSL Version 6.0