sbt 13.5 を使用してビルドする scala プロジェクトがあります。
shapeless を使用してモジュールを実装したので、sbt がプロジェクトをインクリメンタルにコンパイルしようとするたびに、必要な暗黙の解決に失敗します。
[...] パラメータマッパーの暗黙的な値が見つかりませんでした [...]
[...] パラメータ フォルダの暗黙的な値が見つかりませんでした [...]
等々。
sbt clean
問題は解決しsbt compile
ますが、プロジェクトはかなり大きく、新しいビルドには数分かかることがあるため、コンパイル時間と生産性が大幅に低下しています。
ここで何が起こっているのか分かりますか?
追加情報
というわけで、いろいろ考えた結果、仮説を立ててみました。この問題は shapeless レコードを使用している場合に発生し、生成されたファイルを見ると、レコード キーごとにシングルトン タイプを生成するマクロに問題がある可能性があると思います。
私のモジュールは次のようHList
にColParser[T, K]
宣言されています:
sealed trait ColParser[T, K] {
val columnL Witness.Aux[K]
}
そのため、コンパイラはマクロを使用してWitness
for eachを生成しColParser
、何を再コンパイルするかを決定する際に sbt が生成されたマクロを追跡できなくなるのではないかと心配していますが、これは大ざっぱな仮説にすぎません。
実際のところ、モジュールを呼び出すコードで何かを変更するたびに (たとえば、 に a を追加/削除するColParser
) HList
、上記のエラーが発生します。モジュールの再コンパイルを強制すると (生成された を削除することにより.class
)、問題が修正されます。