sbtコマンド実行時のinsecure HTTP request is unsupportedエラーを解決する方法
久しぶりにsbtを使ってみたら、見事爆死しました。
sbtとAdoptOpenJDKをアップデートしたけど解決しませんでした。
発生したエラー
$ sbt new scala/scala-seed.g8
copying runtime jar...
[info] welcome to sbt 1.4.6 (AdoptOpenJDK Java 11.0.9.1)
[info] loading settings for project global-plugins from idea.sbt ...
[info] loading global plugins from /Users/kuratadaisuke/.sbt/1.0/plugins
[info] set current project to projects (in build file:/Users/kuratadaisuke/Projects/)
[info] set current project to projects (in build file:/Users/kuratadaisuke/Projects/)
[error] insecure HTTP request is unsupported 'http://repo.artima.com/releases'; switch to HTTPS or opt-in as ("Artima Maven Repository" at "http://repo.artima.com/releases").withAllowInsecureProtocol(true), or by using allowInsecureProtocol in repositories file
[error] java.lang.RuntimeException: insecure protocol is unsupported
[error] at scala.sys.package$.error(package.scala:30)
[error] at sbt.Classpaths$.errorInsecureProtocol(Defaults.scala:3117)
[error] at sbt.Classpaths$.$anonfun$mkIvyConfiguration$1(Defaults.scala:3713)
[error] at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error] at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error] at sbt.Execute.work(Execute.scala:291)
[error] at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error] at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[error] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error] at java.base/java.lang.Thread.run(Thread.java:834)
[error] (ivyConfiguration) insecure protocol is unsupported
原因
insecure HTTP request is unsupported 'http://repo.artima.com/releases'
HTTPリクエストでArtima Maven Repositoryにアクセスしていることが原因です。
Spring Plugins RepositoryでもHTTPリクエストを送信したら400か401かのエラーが発生していたが同じだろうか。
実際に~/.sbt/1.0/global.sbt
を開くと、Artima Maven RepositoryのURLがHTTPプロトコルで定義されていた。
resolvers += "Artima Maven Repository" at "http://repo.artima.com/releases"
解決策1
("Artima Maven Repository" at "http://repo.artima.com/releases").withAllowInsecureProtocol(true)
ここに書いてある通りに~/.sbt/1.0/global.sbt
を修正します。
// resolvers += "Artima Maven Repository" at "http://repo.artima.com/releases"
resolvers += ("Artima Maven Repository" at "http://repo.artima.com/releases").withAllowInsecureProtocol(true)
sbt new scala/scala-seed.g8
を実行したら動きました。
解決策2
解決策1を実施してから思いましたが、URLをHTTPSにすれば良いだけのような気がしました。
// resolvers += "Artima Maven Repository" at "http://repo.artima.com/releases"
resolvers += "Artima Maven Repository" at "https://repo.artima.com/releases"
sbt new scala/scala-seed.g8
を実行したら動きました。
まとめ
最近HTTPリクエストを受け付けなくなったリポジトリがいくつかあるのかもしれない。どこかのリポジトリからライブラリがダウンロードできなくなったら、同様の対応をすれば直ると思います。(思うだけ)