Circe 找不到隐式编码器
Circe cannot find implicit encoder
我正在尝试将一些 类 编码为 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)
}
}
给出以下编译错误
Error:(30, 21) could not find implicit value for parameter encoder:
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)
}
给出以下错误
Error:(25, 42) could not find Lazy implicit value of type
io.circe.generic.encoding.DerivedObjectEncoder[A]
implicit val enc : Encoder[OneCol] = deriveEncoder
Error:(25, 42) not enough arguments for method deriveEncoder:
(implicit encode:
shapeless.Lazy[io.circe.generic.encoding.DerivedObjectEncoder[A]])io.circe.ObjectEncoder[A].
Unspecified value parameter encode.
implicit val enc : Encoder[OneCol] = deriveEncoder
我相当确定自动和半自动编码器生成的全部目的就是处理这些情况,所以我对自己做错了什么感到有点不知所措。
如果版本信息相关,我正在使用 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 版本可以解决这个问题。
我正在尝试将一些 类 编码为 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)
}
}
给出以下编译错误
Error:(30, 21) could not find implicit value for parameter encoder: 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)
}
给出以下错误
Error:(25, 42) could not find Lazy implicit value of type io.circe.generic.encoding.DerivedObjectEncoder[A] implicit val enc : Encoder[OneCol] = deriveEncoder
Error:(25, 42) not enough arguments for method deriveEncoder: (implicit encode: shapeless.Lazy[io.circe.generic.encoding.DerivedObjectEncoder[A]])io.circe.ObjectEncoder[A]. Unspecified value parameter encode. implicit val enc : Encoder[OneCol] = deriveEncoder
我相当确定自动和半自动编码器生成的全部目的就是处理这些情况,所以我对自己做错了什么感到有点不知所措。
如果版本信息相关,我正在使用 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 版本可以解决这个问题。