Я написал библиотеку, которая предоставляет аннотации Java и код Scala.Я потребляю в Scala, работаю в IntelliJ
Если я не использую ни одну из своих аннотаций, все работает отлично.Если я использую аннотацию в моем потребляющем проекте, я получаю следующее исключение:
Exception in thread "main" java.lang.RuntimeException: error reading Scala signature of co.blocke.blog.PayLoad: unsafe symbol Change (child of package scalajack) in runtime reflection universe
at scala.reflect.internal.pickling.UnPickler.unpickle(UnPickler.scala:51)
...
Если я запускаю из командной строки, предоставляя мою библиотеку на пути к классам, все хорошо - без ошибок.Он взрывается только внутри IntelliJ.
Понимая, что это связано с каким-то коллизией версий, я перестроил свою библиотеку, заставляя JDK 1.8 источник / цель для встроенного кода в sbt, и переупаковал свою библиотеку:
javacOptions ++= Seq("-source", "1.8", "-target", "1.8"),
scalacOptions ++= Seq("-target:jvm-1.8", "-language:_"),
Я просмотрел файлы встроенного класса с помощью шестнадцатеричного редактора и подтвердил, что он действительно создан для JVM 1.8 (они есть).
Это не решило проблему.Я добавил это в свой потребляющий проект, чтобы подтвердить, какая JVM работает:
println("Scala: " + scala.util.Properties.versionString)
println("Java : " + System.getProperty("java.version"))
Это показало Scala 2.12.8 и Java 1.8, что соответствует тому, что я ожидаю.