2

我有一个使用 sbt 13.5 构建的 scala 项目。

由于我使用 shapeless 实现了一个模块,因此每当 sbt 尝试增量编译项目时,它都无法解决所需的隐式:

[...] 找不到参数映射器的隐含值 [...]

[...] 找不到参数文件夹的隐含值 [...]

等等。

sbt cleansbt compile解决了这个问题,但项目相当大,这反过来又痛苦地减慢了编译时间和我的生产力,因为新构建可能需要几分钟。

知道这里发生了什么吗?


一些额外的信息

所以,经过一番思考,我做了一些假设。使用无形记录时会出现此问题,通过查看生成的文件,我认为为每个记录键生成单例类型的宏可能存在问题。

HList我的模块需要ColParser[T, K]声明为:

sealed trait ColParser[T, K] {
  val columnL Witness.Aux[K]
}

所以编译器Witness为每个ColParser使用宏生成一个,我担心 sbt 在决定重新编译什么时会丢失生成的宏,但这只是一个粗略的假设。

事实上,每当我更改调用我的模块的代码中的某些内容(例如,我ColParser从 中添加/删除 a HList)时,我都会收到上述错误。强制重新编译模块(通过删除生成的.class)解决了这个问题。

4

0 回答 0