Coursier 2.0.0で必要な cache migrationをやってみた

coursier 2.0.0.final 以降で移動されるキャッシュファイルのマイグレーションをやってみました。
2020.09.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

シルバーウィーク明け(2020年9月末頃)にIntelliJを起動するとsbtの初期化中に以下のような警告が表示されました。

Warning: a legacy coursier cache was found at /Users/sasaki.kazuhiro/.coursier/cache/v1 and is currently being used.
Support for that cache location will be removed in coursier 2.0.0 final, whose release is imminent.
Follow the instructions at
https://github.com/coursier/cache-migration#cache-migration
in order to migrate your cache to the newer location.

これは何?

ざっくり言うとcoursier 2.0.0.finalからキャッシュのパスが変更されるのでキャッシュを移行せよ。という内容です。

移動の手順

メッセージにあるリポジトリでマイグレーションの方法が説明されているので、その手順に従ってマイグレーションをしてみました。

## dry-run
> cs launch --contrib cache-migration -- --dry-run
https://repo1.maven.org/maven2/io/get-coursier/apps/maven-metadata.xml
  100.0% [##########] 1.4 KiB (2.3 KiB / s)
https://repo1.maven.org/maven2/io/get-coursier/apps-contrib/maven-metadata.xml
  100.0% [##########] 1.2 KiB (5.0 KiB / s)
https://repo1.maven.org/maven2/io/get-coursier/apps-contrib/0.0.39/apps-contrib-0.0.39.pom
  100.0% [##########] 1.3 KiB (6.3 KiB / s)
https://repo1.maven.org/maven2/io/get-coursier/util/cache-migration_2.13/0.1.0/cache-migration_2.13-0.1.0.pom
  100.0% [##########] 2.0 KiB (9.0 KiB / s)
https://repo1.maven.org/maven2/com/github/alexarchambault/case-app_2.13/2.0.0-M16/case-app_2.13-2.0.0-M16.pom
  100.0% [##########] 2.2 KiB (9.3 KiB / s)
https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.1/scala-library-2.13.1.pom
  100.0% [##########] 1.6 KiB (3.6 KiB / s)
https://repo1.maven.org/maven2/io/get-coursier/coursier-cache_2.13/2.0.0-RC6-13/coursier-cache_2.13-2.0.0-RC6-13.pom
  100.0% [##########] 2.6 KiB (5.1 KiB / s)
https://repo1.maven.org/maven2/io/github/alexarchambault/windows-ansi/windows-ansi/0.0.3/windows-ansi-0.0.3.pom
  100.0% [##########] 1.9 KiB (11.9 KiB / s)
https://repo1.maven.org/maven2/io/get-coursier/coursier-util_2.13/2.0.0-RC6-13/coursier-util_2.13-2.0.0-RC6-13.pom
  100.0% [##########] 1.9 KiB (8.6 KiB / s)
https://repo1.maven.org/maven2/com/github/alexarchambault/case-app-annotations_2.13/2.0.0-M16/case-app-annotations_2.13-2.0.0-M16.pom
  100.0% [##########] 1.6 KiB (7.0 KiB / s)
https://repo1.maven.org/maven2/com/github/alexarchambault/case-app-util_2.13/2.0.0-M16/case-app-util_2.13-2.0.0-M16.pom
  100.0% [##########] 2.2 KiB (4.3 KiB / s)
https://repo1.maven.org/maven2/com/chuusai/shapeless_2.13/2.3.3/shapeless_2.13-2.3.3.pom
  100.0% [##########] 2.1 KiB (12.3 KiB / s)
https://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.18/jansi-1.18.pom
  100.0% [##########] 3.7 KiB (22.2 KiB / s)
https://repo1.maven.org/maven2/org/fusesource/jansi/jansi-project/1.18/jansi-project-1.18.pom
  100.0% [##########] 10.2 KiB (64.6 KiB / s)
https://repo1.maven.org/maven2/com/github/alexarchambault/case-app-annotations_2.13/2.0.0-M16/case-app-annotations_2.13-2.0.0-M16.jar
  100.0% [##########] 11.4 KiB (37.8 KiB / s)
https://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.18/jansi-1.18.jar
  100.0% [##########] 280.6 KiB (775.2 KiB / s)
https://repo1.maven.org/maven2/io/get-coursier/util/cache-migration_2.13/0.1.0/cache-migration_2.13-0.1.0.jar
  100.0% [##########] 50.5 KiB (221.7 KiB / s)
https://repo1.maven.org/maven2/com/github/alexarchambault/case-app_2.13/2.0.0-M16/case-app_2.13-2.0.0-M16.jar
  100.0% [##########] 347.9 KiB (494.9 KiB / s)
https://repo1.maven.org/maven2/io/github/alexarchambault/windows-ansi/windows-ansi/0.0.3/windows-ansi-0.0.3.jar
  100.0% [##########] 6.2 KiB (35.9 KiB / s)
https://repo1.maven.org/maven2/com/github/alexarchambault/case-app-util_2.13/2.0.0-M16/case-app-util_2.13-2.0.0-M16.jar
  100.0% [##########] 59.5 KiB (96.0 KiB / s)
https://repo1.maven.org/maven2/io/get-coursier/coursier-cache_2.13/2.0.0-RC6-13/coursier-cache_2.13-2.0.0-RC6-13.jar
  100.0% [##########] 314.1 KiB (176.2 KiB / s)
https://repo1.maven.org/maven2/io/get-coursier/coursier-util_2.13/2.0.0-RC6-13/coursier-util_2.13-2.0.0-RC6-13.jar
  100.0% [##########] 463.1 KiB (102.9 KiB / s)
https://repo1.maven.org/maven2/com/chuusai/shapeless_2.13/2.3.3/shapeless_2.13-2.3.3.jar
  100.0% [##########] 3.1 MiB (649.1 KiB / s)
https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.1/scala-library-2.13.1.jar
  100.0% [##########] 5.5 MiB (926.2 KiB / s)
Both
  /Users/sasaki.kazuhiro/.coursier/cache/v1
and
  /Users/sasaki.kazuhiro/Library/Caches/Coursier/v1
exist.

Pass --one-by-one to move the elements of
  /Users/sasaki.kazuhiro/.coursier/cache/v1
to
  /Users/sasaki.kazuhiro/Library/Caches/Coursier/v1

Pass --clean-up to also remove empty directories in
  /Users/sasaki.kazuhiro/.coursier/cache/v1
(including itself if it ends up empty).

Alternatively, remove
  /Users/sasaki.kazuhiro/.coursier/cache/v1
if you think it can be discarded.

以下に抜粋したメッセージのとおり移行先と移行元のディレクトリが両方存在するのでまとめて移行はできないので --one-by-one オプションで1つづつ移動することにします。

Both
  /Users/sasaki.kazuhiro/.coursier/cache/v1
and
  /Users/sasaki.kazuhiro/Library/Caches/Coursier/v1
exist.
Pass --one-by-one to move the elements of
  /Users/sasaki.kazuhiro/.coursier/cache/v1
to
  /Users/sasaki.kazuhiro/Library/Caches/Coursier/v1
> cs launch --contrib cache-migration -- --clean-up --one-by-one
Moving files individually from /Users/sasaki.kazuhiro/.coursier/cache/v1 to /Users/sasaki.kazuhiro/Library/Caches/Coursier/v1
Found 5978 files to move
> cs launch --contrib cache-migration -- --clean-up --one-by-one
Moving files individually from /Users/sasaki.kazuhiro/.coursier/cache/v1 to /Users/sasaki.kazuhiro/Library/Caches/Coursier/v1
Found 0 files to move

確認してみます。

> ls ~/.coursier/cache/v1/https
artifacts.elastic.co  repo1.maven.org
> ls ~/Library/Caches/Coursier/v1/https
artifacts.elastic.co  repo.scala-sbt.org  repo.typesafe.com  repo1.maven.org

移動できていそうです。 IntelliJでプロジェクトのロードすると警告の表示はされなくなりました。まだいくつか残っていますが移動はできたようです。

IntelliJのライブラリ設定の更新

移動後にIntelliJでビルドをすると以下のエラーが発生しました。

scalac: Scala compiler JARs not found (module 'sbt-native-image-example'): /Users/sasaki.kazuhiro/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.3/scala-library-2.13.3.jar, /Users/sasaki.kazuhiro/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.13.3/scala-compiler-2.13.3.jar, /Users/sasaki.kazuhiro/.coursier/cache/v1/https/repo1.maven.org/maven2/net/java/dev/jna/jna/5.3.1/jna-5.3.1.jar, /Users/sasaki.kazuhiro/.coursier/cache/v1/https/repo1.maven.org/maven2/org/jline/jline/3.15.0/jline-3.15.0.jar, /Users/sasaki.kazuhiro/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.3/scala-reflect-2.13.3.jar

Project Structure → Librariesを確認するとプロジェクトに設定されているScala SDKの一部が移動してしまったために発生しているようです。 他のプロジェクトでも移動されたライブラリが見つからずエラーになっています。これは当該ライブラリを一旦削除してから「Reload All sbt projects」を実行することで移動後のディレクトリを参照するようになりました。

まとめ

Coursierが導入されていないバージョンのsbtを使っていたり、上記のライブラリの更新をしている時間がない場合には移動は行わない方がいいとおもいます。