Test.scala:1: 未使用的导入包 test.avro
Test.scala:1: Unused import package test.avro
我有这样的小测试class:
package test.avro
object Test extends App {
import java.io.ByteArrayOutputStream
import com.sksamuel.avro4s.AvroOutputStream
case class Composer(name: String, birthplace: String, compositions: Seq[String])
val ennio = Composer("ennio morricone", "rome", Seq("legend of 1900", "ecstasy of gold"))
val baos = new ByteArrayOutputStream()
val output = AvroOutputStream.json[Composer](baos)
output.write(ennio)
output.close()
print(baos.toString("UTF-8"))
}
有相关设置:
scalaVersion := "2.11.8"
scalacOptions ++= Seq("-Ywarn-unused-import", "-Xfatal-warnings")
libraryDependencies += "com.sksamuel.avro4s" %% "avro4s-core" % "1.6.1"
当我尝试编译它时,我收到以下错误消息:
[error] [path on my drive...]/src/main/scala/test/avro/Test.scala:1: Unused import
[error] package test.avro
[error] ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
我看到 avro4s issue tracker 上报告了类似的错误,但隐式错误不是未使用的导入。然而,那是在 1.5.0
版本中——我正在使用 1.6.1
版本(并尝试了中间的几个版本来检查这是否不是某种随机回归)。将 avro4j 导入更改为 import com.sksamuel.avro4s._
也没有帮助。
另一方面,错误消息类似于 this one。我使用 Scala 2.11.8,但以防万一我检查了更改为 2.11.7 是否有帮助(它没有)。
我还能做些什么来弄清楚这种奇怪行为的根源是什么?是我遗漏了什么还是错误?那么我应该在哪里归档呢?我怀疑它与 ToRecord
特征宏有关,但我不能确定。
编辑:删除 "-Ywarn-unused-import"
让事情重新开始 - 我应该假设它是库中的错误吗?
似乎 avro4s
' ToRecord
宏生成了一些未使用的导入。该宏有 if-else 子句,所以我猜(至少)其中一种情况没有使用所有前面的导入。
连同 Scala 编译器中的这个(或类似)错误 - https://issues.scala-lang.org/browse/SI-9616 - 它会导致警告出现,并且 "-Xfatal-warnings"
会导致构建失败。
我的解决方法是添加:
scalacOptions --= Seq("-Ywarn-unused-import")
到使用avro4s
的模块。当它得到修复时(在 scalac
或 avro4s
中)我将删除它。
更新:问题已在版本 1.6.2 中解决。
我有这样的小测试class:
package test.avro
object Test extends App {
import java.io.ByteArrayOutputStream
import com.sksamuel.avro4s.AvroOutputStream
case class Composer(name: String, birthplace: String, compositions: Seq[String])
val ennio = Composer("ennio morricone", "rome", Seq("legend of 1900", "ecstasy of gold"))
val baos = new ByteArrayOutputStream()
val output = AvroOutputStream.json[Composer](baos)
output.write(ennio)
output.close()
print(baos.toString("UTF-8"))
}
有相关设置:
scalaVersion := "2.11.8"
scalacOptions ++= Seq("-Ywarn-unused-import", "-Xfatal-warnings")
libraryDependencies += "com.sksamuel.avro4s" %% "avro4s-core" % "1.6.1"
当我尝试编译它时,我收到以下错误消息:
[error] [path on my drive...]/src/main/scala/test/avro/Test.scala:1: Unused import
[error] package test.avro
[error] ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
我看到 avro4s issue tracker 上报告了类似的错误,但隐式错误不是未使用的导入。然而,那是在 1.5.0
版本中——我正在使用 1.6.1
版本(并尝试了中间的几个版本来检查这是否不是某种随机回归)。将 avro4j 导入更改为 import com.sksamuel.avro4s._
也没有帮助。
另一方面,错误消息类似于 this one。我使用 Scala 2.11.8,但以防万一我检查了更改为 2.11.7 是否有帮助(它没有)。
我还能做些什么来弄清楚这种奇怪行为的根源是什么?是我遗漏了什么还是错误?那么我应该在哪里归档呢?我怀疑它与 ToRecord
特征宏有关,但我不能确定。
编辑:删除 "-Ywarn-unused-import"
让事情重新开始 - 我应该假设它是库中的错误吗?
似乎 avro4s
' ToRecord
宏生成了一些未使用的导入。该宏有 if-else 子句,所以我猜(至少)其中一种情况没有使用所有前面的导入。
连同 Scala 编译器中的这个(或类似)错误 - https://issues.scala-lang.org/browse/SI-9616 - 它会导致警告出现,并且 "-Xfatal-warnings"
会导致构建失败。
我的解决方法是添加:
scalacOptions --= Seq("-Ywarn-unused-import")
到使用avro4s
的模块。当它得到修复时(在 scalac
或 avro4s
中)我将删除它。
更新:问题已在版本 1.6.2 中解决。