のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

エラー対応:sbt1.0系からsbt0.13系に変更したときにコンパイルエラーが発生するときの対応

やろうとしたこと

sbt compileを同一プロジェクトでsbt1.0で利用していたところsbt0.13系を使用してコンパイルしようとした (旧バージョンのプロダクトをビルドしたかった。) 当然sbtは1.0と0.13で定義とか色々設定の仕方が変わっていたりするので、そこのあたりはちゃんと設定できているものとする。 (先日はビルドできていたのになぜかできなくなった)

 エラーメッセージ

[error] (compile:copyResources) Error wrapping InputStream in GZIPInputStream: java.util.zip.ZipException: Not in GZIP format

ここには詳細は載せないが、こまかいスタックトレースを追っても原因にたどり着けなかった。

結論

依存性の更新ができていなかった

今回のケースでは、旧バージョンのプロダクションをビルドするものだったので、当然dependenciesは1.0系統と異なるバージョンが指定されていた。 で、これらはprojectフォルダー配下のtargetディレクトリにインストールされているのがデフォルトであるが、どうも1.0→0.13系にした場合はその依存性が更新されず、 1.0系のバージョンを利用してコンパイルしようとして、失敗していたように見える。 おそらく0.13→1.0系にした場合は、自動的に依存性が更新されると思われる。

対策

targetフォルダをすべて消す。

複数のsbtプロジェクトに分けるケースが多いと思うが、例えば以下コマンド等で消す。

find . -name target -exec rm -r "{}" \;

参考

github.com