Help us understand the problem. What is going on with this article?

sbt 1.2.0以降にアップグレードしたらlibrary eviction warningが頻繁に出るようになってしまった場合の対処法

More than 1 year has passed since last update.

現象

SBTのversion conflict(s)解消方法まとめ - Qiita
に書かれた方法などでライブラリの衝突(conflict)を解決していたのに、sbtのバージョンを1.2.0以降に上げたら次のwarningが頻繁に出るようになってしまった。

[warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.

原因

sbt 1.2.0で導入されたwarnEvictionSummaryという機能の実装が少しまずいのが原因。
warnを出すべきでないバージョン衝突1までwarningを出してしまっている。

解決策

上記の修正が含まれたバージョンのsbtが出るまでは以下を build.sbt2 に書くことでwarningを抑制できる。

evictionWarningOptions in update := EvictionWarningOptions.default.withWarnEvictionSummary(false)

これでeviction warning summaryがでなくなるんじゃないかと心配かもしれないが、
https://github.com/sbt/librarymanagement/blob/v1.2.4/core/src/main/scala/sbt/librarymanagement/EvictionWarning.scala#L317
の実装上eviction summaryが有効だろうが無効だろうがbinary compatibilityがない危険なconflictはどちらにしろwarningが出るので安心していい。

逆に上の修正が入ったあとのバージョンのsbtでは本当にeviction summaryがでなくなってしまうので、この設定は必ず取り除くこと。


  1. 明文化された記述が残念ながら見つけられないものの、ドキュメント内の間接的な記述およびコード実装から察するにsbtは扱うライブラリがセマンティックバージョニングに沿っていることを期待した上で、セマンティックバージョニングに沿っているなら互換性が破壊されないはずのマイナーバージョン、マイナーマイナーバージョンのバージョンconflictは特に警告を出さずにより新しい方のバージョンを取得している。 

  2. メタプロジェクトのupdateでも警告が出ている場合は project/build.sbt にも書くこと 

bigwheel
speee
株式会社Speeeは「解き尽くす。未来を引きよせる。」というミッションを実現すべく、中長期的な目線で企業価値を最大化させていくため、組織・事業のStyleを大切にした永続的な価値創造を目指しています。
https://www.speee.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away