Я новичок в JVM land, поэтому прошу прощения, если это распространенная проблема. Я использую Scala (2.12) с sbt 0.13.13 на OSX.NoClassDefFoundError с sbt и scala.swing
Я работаю над крошечным приложением, которое зависит от библиотеки GUI scala.swing
(2.10.x). Я сразу же столкнулся с проблемой выполнения с кодом примера (http://otfried.org/scala/index_28.html).
В частности, при вызове sbt run
я получаю StackTrace ведущий с:
[error] (run-main-0) java.lang.NoClassDefFoundError: scala/Proxy$class
java.lang.NoClassDefFoundError: scala/Proxy$class
at scala.swing.Window.<init>(Window.scala:25)
at scala.swing.Frame.<init>(RichWindow.scala:75)
at scala.swing.MainFrame.<init>(MainFrame.scala:19)
(Proxy
, кажется, класс/черта в лестницу STDLIB)
Чтение на SO и в других местах предполагает такого рода исключение обычно испускается, когда код, присутствующий во время компиляции, не может быть впоследствии обнаружен во время выполнения. Действительно, код компилируется просто отлично, только при запуске кода возникает проблема.
Все предложения, которые я нашел, это согласование classpath
для решения этих проблем. Тем не менее, если консоль sbt
это верить, мое время компиляции и время выполнения пути к классам идентичны:
> show compile:fullClasspath
[info] * Attributed(/Users/chris/Projects/thing2/target/scala-2.12/classes)
[info] * Attributed(/Users/chris/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.1.jar)
[info] * Attributed(/Users/chris/.ivy2/cache/org.scala-lang/scala-swing/jars/scala-swing-2.10.6.jar)
[success] Total time: 0 s, completed Dec 24, 2016 7:01:15 PM
> show runtime:fullClasspath
[info] * Attributed(/Users/chris/Projects/thing2/target/scala-2.12/classes)
[info] * Attributed(/Users/chris/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.1.jar)
[info] * Attributed(/Users/chris/.ivy2/cache/org.scala-lang/scala-swing/jars/scala-swing-2.10.6.jar)
[success] Total time: 0 s, completed Dec 24, 2016 7:01:19 PM
Итак, я нахожусь в немного судебно тупиковой. Любые предложения о том, где искать следующий, будут высоко оценены. Для ясности это произошло только с scala.swing
. У меня есть еще несколько небольших проектов в Scala, у которых не было никаких проблем. Что озадачивает «отсутствующий» класс, кажется, является стандартным материалом scala scala.
Если вы пытаетесь использовать версию 2.10.x 'scala.swing' с Scala 2.12, то проблема, вероятно, связана с несовместимыми версиями. Используйте версию 2.12 'scala.swing' –
Я думаю, что большинство библиотек Scala не имеют обратной или прямой совместимости –
2.10.x относится к внутреннему управлению версиями' scala.swing', я думаю. Документы на https://github.com/scala/scala-swing указывают, что ветка swing 2.x является правильной для использования в scala. 2.12. – cmw