結論としては以下のissueに大体全部書いてあります。
依存ライブラリのjarのキャッシュではなく、あくまでインクリメンタルコンパイラのキャッシュの話です。
簡単に現象をまとめると
続きを読むというのを作りました。
scalapbというのは、scala向けのprotocol buffersやgRPCのためのライブラリですが、protobufのmessageに対応するcase classのコンパニオンオブジェクトのapplyには、すべて(protobuf上のデフォルト値と同様の)デフォルト引数が設定されています。
これは便利なときもあるのですが、意図せず使ってしまってバグることも多いので、以前自分がpull reqして、デフォルト引数がないファクトリーメソッドを別途追加したことがありました。
つまりデフォルト引数によるミスを防ぎたい場合は、こっちの "of" を使えばいいです。 そして、ofに書き換える箇所を探すのにあたって、大量にあって探しづらいのでwartremoverでwarnかerrorにしてくれるものを作りました。
(wartremoverには、デフォルト引数の"定義"を警告するやつはあるけど、使用側はない?どちらにしろ、他のやつは許容して、scalapbのやつだけ警告したかったので作った)
本当はscalafixで自動書き換え作りたかったのですが、そんなにすぐに作れる能力がなかったので、誰か作って・・・。
以下のような質問を某所で受けたので
書きました
既にあるとか、もっといい感じに書ける、みたいなのがあればお知らせください。
ちなみに、デフォルトでは単体のprojectしかcleanしないのは、完全にsbt的には意図した挙動のはずです。 デフォルトが今回自分が書いたような挙動では、逆に特定の単体のprojectだけをcleanしようとすると手段がなくて困るので。とはいえ、その手段が提供されていればデフォルトのcleanの挙動がそっちでも困らない?といえるかもしれませんが。
> もっといい感じに書ける、みたいなのがあればお知らせください。
— Taisuke OE (@OE_uia) 2020年6月14日
自力でloopしなくても、classpathTransitiveRefsを使えば同じことできそうです。
val ref = thisProjectRef.value
(ref +: buildDependencies.value.classpathTransitiveRefs(ref)).map(_ / clean).joinhttps://t.co/6DPyQ5nS0I
要点をまとめると
みたいな感じなんですが、とりあえずもう答を貼っておきます。すでに誰か作っていそうな気もするので、そしたら教えて下さい
"sub projectの列挙を全自動で" は(自分にとっては)とても重要で、なぜかというと、仕事でこれ必要になったんですが、仕事のprojectはmonorepoでsbtのprojectが、このblog書いてる時点で81個あるので(今後も増える可能性あり)、明示的に列挙なんて絶対にやりたくない、という理由です。