我正在尝试将一些类编码为json字符串,但是无论我如何尝试,我的类似乎都无法为我正在使用的案例类找到隐式编码器。
这是我能够精简的最小示例。
import io.circe._
import io.circe.generic.semiauto._
import io.circe.generic.auto._
import io.circe.syntax._
case class OneCol(value: String)
object testObject {
def main(args: Array[String]): Unit = {
val testVal = OneCol("someVal")
println(testVal.asJson)
}
}
给出以下编译错误
错误:(30,21)找不到参数编码器的隐式值:
io.circe.Encoder [OneCol]
println(testVal.asJson)
我尝试过使用半自动编码器创建相同的东西
def main(args: Array[String]): Unit = {
implicit val enc : Encoder[OneCol] = deriveEncoder
val testVal = OneCol("someVal")
println(testVal.asJson)
}
这给出了以下错误
错误:(25,42)找不到类型的惰性隐式值
io.circe.generic.encoding.DerivedObjectEncoder [A]
隐式val enc:Encoder [OneCol] =派生Encoder
错误:(25,42)没有足够的参数用于方法deriveEncoder:
(隐式编码:
Shapeless.Lazy [io.circe.generic.encoding.DerivedObjectEncoder [A]])io.circe.ObjectEncoder [A]。
未指定的值参数编码。
隐式val enc:Encoder [OneCol] =派生Encoder
我相当确定,自动和半自动编码器生成的全部目的是要处理此类情况,因此对于我做错的事情我有些茫然。
我使用的是Scala 2.10.4,如果版本信息相关,则使用0.7.0(circe-core_2.10,circe-generic_2.10工件),并使用maven作为软件包管理器。
有谁知道为什么会失败,以及如何正确进行编译?
编辑:
这是我的带有宏插件的POM部分。尝试了列出的两个编译器插件(已注释和未注释),并且都仍然给出相同的错误。
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<configuration>
<args>
<!-- work-around for https://issues.scala-lang.org/browse/SI-8358 -->
<arg>-nobootcp</arg>
</args>
<recompileMode>incremental</recompileMode>
<compilerPlugins>
<compilerPlugin>
<groupId>org.scalamacros</groupId>
<artifactId>paradise_2.10.4</artifactId>
<version>2.1.0</version>
</compilerPlugin>
<!--<compilerPlugin>-->
<!--<groupId>org.scala-lang.plugins</groupId>-->
<!--<artifactId>macro-paradise_2.10.2</artifactId>-->
<!--<version>2.0.0-SNAPSHOT</version>-->
<!--</compilerPlugin>-->
</compilerPlugins>
</configuration>
<executions>
<execution>
<id>scala-compile-first</id>
<phase>process-resources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile-first</id>
<phase>process-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
最佳答案
事实证明,circe-core_2.10依赖于scala 2.10.6版,这意味着我的scala版本(2.10.4)与该库不兼容,从而导致了问题。升级到适当的scala版本可以解决此问题。