Test.scala: 1: неиспользуемый тест пакета импорта.avro

#scala #avro4s

#scala #avro4s

Вопрос:

У меня есть небольшой тестовый класс, подобный этому:

 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 была обнаружена аналогичная ошибка, но с неявной ошибкой, не являющейся неиспользуемым импортом. Однако это было в версии 1.5.0 — я использую версию 1.6.1 (и пробовал несколько промежуточных версий, чтобы проверить, не является ли это случайной регрессией). Изменение импорта avro4j на import com.sksamuel.avro4s._ также не помогло.

С другой стороны, сообщение об ошибке похоже на это. Я использую Scala 2.11.8, но на всякий случай я проверил, поможет ли переход на 2.11.7 (это не помогло).

Что еще я могу попытаться выяснить, что является источником такого странного поведения? Это что-то, что я пропустил, или ошибка? Итак, куда я должен его подать? Я подозреваю, что это что-то с ToRecord макросами признаков, но я не могу сказать наверняка.

РЕДАКТИРОВАТЬ: удаление "-Ywarn-unused-import" заставить вещи работать снова — должен ли я предположить, что это ошибка в библиотеке?

Ответ №1:

Кажется 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.