Test.scala:1: неиспользованный пакет импорта test.avro
У меня есть небольшой тестовый класс, как это:
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.