2016-12-25 6 views
4

Ich bin neu in JVM Land, also entschuldige ich mich, wenn das ein häufiges Problem ist. Ich benutze Scala (2.12) mit sbt 0.13.13 unter OSX.NoClassDefFoundError mit sbt und scala.swing

Ich arbeite an einer kleinen App, die von der GUI-Bibliothek scala.swing (2.10.x) abhängt. Ich bin fast augenblicklich mit dem Beispielcode (http://otfried.org/scala/index_28.html) auf ein Laufzeitproblem gestoßen.

Insbesondere wenn sbt run Aufruf erhalte ich ein stacktrace führende mit:

[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 erscheint eine Klasse/Merkmal in der scala stdlib zu sein)

Lesen auf SO und anderswo schon sagt, diese Art von Eine Ausnahme wird normalerweise ausgegeben, wenn zur Kompilierungszeit vorhandener Code zur Laufzeit nicht zur Laufzeit gefunden werden kann. In der Tat kompiliert der Code einfach gut, es ist nur, wenn der Code ausgeführt wird, dass das Problem auftritt.

Alle Vorschläge, die ich gefunden habe, sind Ihre classpath in Einklang zu bringen, um diese Probleme zu lösen. Wenn jedoch die sbt Konsole geglaubt, meine Compile-Zeit und Laufzeit CLASSPATHs sind identisch:

> 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 

Also, ich mich an etwas forensischen Sackgasse finden. Irgendwelche Vorschläge, wohin man als nächstes schaut, würden sehr geschätzt. Der Übersichtlichkeit halber ist dies bisher nur mit scala.swing geschehen. Ich habe ein paar andere kleine Projekte in Scala, die keine Probleme hatten. Was verblüffend ist, ist die "fehlende" Klasse, die als Standard-Bibliotheksmaterial erscheint.

+0

Wenn Sie versuchen, die 2.10.x-Version von "scala.swing" mit Scala 2.12 zu verwenden, liegt das Problem wahrscheinlich an inkompatiblen Versionen. Verwenden Sie die 2.12-Version von "scala.swing" –

+0

Ich denke, die meisten Scala-Bibliotheken sind nicht rückwärts oder vorwärts kompatibel –

+1

Die 2.10.x bezieht sich auf die interne Versionierung von "scala.swing", denke ich. Die Dokumentation unter https://github.com/scala/scala-swing gibt an, dass der 2.x-Zweig für swal der richtige ist, der für scala verwendet werden kann. 2.12 – cmw

Antwort

7

verweist auf ein Problem, bei dem Sie Bibliotheken mischen, die für verschiedene große Scala-Versionen kompiliert wurden. Wenn Sie Scala 2.12 verwenden, müssen Sie auch das Swing-Modul mit einer passenden Version verwenden. Vor Scala 2.11 Swing hat mit einem Artefakt wie folgt veröffentlicht:

"org.scala-lang" % "scala-swing" % scalaVersion.value 

Es wurde dann zu der Gruppe org.scala-lang.modules bewegt. Ihre Build-Datei sollte wie folgt enthalten:

scalaVersion := "2.12.1" 

libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "2.0.0-M2" 

(es scheint die neueste Scala 2.11 kompatible Version "1.0.2" hat für Scala 2.12 nicht veröffentlicht worden, und so müssen Sie direkt auf "2.0.0-M2" springen, die meist sein sollte Quelle kompatibel) .

+0

Ich habe es versäumt, in meiner ursprünglichen Frage, dass ich angeben habe den richtigen Swing-Zweig in meiner 'built.sbt' für Scala 2.12 angegeben. (Swing spezifiziert bei 2,10+) – cmw

+0

Es gibt keine 2.10+, die für Scala 2.12 korrekt ist. Sie mischen es mit dem 2.0.x-Zweig, für den ich das obige Artefakt angegeben habe. –

Verwandte Themen