5

我正在尝试将一些类编码为 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 类型的惰性隐式值:编码器 [OneCol] = 派生编码器

错误:(25, 42) 没有足够的参数用于方法 derivedEncoder:(隐式编码:shapeless.Lazy[io.circe.generic.encoding.DerivedObjectEncoder[A]])io.circe.ObjectEncoder[A]。未指定的值参数编码。隐式 val enc:编码器 [OneCol] = 派生编码器

我相当确定自动和半自动编码器生成的全部目的是处理这样的情况,所以我对自己做错了什么有点茫然。

如果版本信息相关,我使用 scala 2.10.4 和 circe 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>
4

1 回答 1

2

事实证明,circe-core_2.10 依赖于 scala 版本 2.10.6,这意味着我的 scala 版本(2.10.4)与库不兼容,从而导致了问题。升级到正确版本的 scala 解决了这个问题。

于 2017-03-31T15:18:02.100 回答