我有一个使用 sbt 13.5 构建的 scala 项目。
由于我使用 shapeless 实现了一个模块,因此每当 sbt 尝试增量编译项目时,它都无法解决所需的隐式:
[...] 找不到参数映射器的隐含值 [...]
[...] 找不到参数文件夹的隐含值 [...]
等等。
sbt clean
并sbt compile
解决了这个问题,但项目相当大,这反过来又痛苦地减慢了编译时间和我的生产力,因为新构建可能需要几分钟。
知道这里发生了什么吗?
一些额外的信息
所以,经过一番思考,我做了一些假设。使用无形记录时会出现此问题,通过查看生成的文件,我认为为每个记录键生成单例类型的宏可能存在问题。
HList
我的模块需要ColParser[T, K]
声明为:
sealed trait ColParser[T, K] {
val columnL Witness.Aux[K]
}
所以编译器Witness
为每个ColParser
使用宏生成一个,我担心 sbt 在决定重新编译什么时会丢失生成的宏,但这只是一个粗略的假设。
事实上,每当我更改调用我的模块的代码中的某些内容(例如,我ColParser
从 中添加/删除 a HList
)时,我都会收到上述错误。强制重新编译模块(通过删除生成的.class
)解决了这个问题。