2017-02-23 5 views
0

Ich habe ein sehr einfaches Projekt, das aus einer .scala Datei, einer build.sbt Datei und einem /lib Ordner mit einem einzigen .jar darin besteht. Meine scalaVersion ist auf 2.10.5 gesetzt (für Abwärtskompatibilität) und ich lief sbt compile, und sbt lädt .jars für scala-2.10 und scala-swing. So wie es scheint, dass ein Teil arbeitet ...scala.swing NoClassDefFoundError

Als ich sbt run bekomme ich einen Laufzeitfehler:

[info] Running GuiProgramOne 
[error] (run-main-0) java.lang.NoClassDefFoundError: scala/collection/GenTraversableLike$class 
java.lang.NoClassDefFoundError: scala/collection/GenTraversableLike$class 
    at scala.swing.RefSet.<init>(Publisher.scala:167) 
    at scala.swing.Publisher$$anon$1.<init>(Publisher.scala:34) 
    at scala.swing.Publisher$class.$init$(Publisher.scala:34) 
    at scala.swing.Window.<init>(Window.scala:25) 
    at scala.swing.Frame.<init>(RichWindow.scala:77) 
    at scala.swing.MainFrame.<init>(MainFrame.scala:19) 
    at UI.<init>(UI.scala:3) 
    at GuiProgramOne$.main(UI.scala:11) 
    at GuiProgramOne.main(UI.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
Caused by: java.lang.ClassNotFoundException: scala.collection.GenTraversableLike$class 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at scala.swing.RefSet.<init>(Publisher.scala:167) 
    at scala.swing.Publisher$$anon$1.<init>(Publisher.scala:34) 
    at scala.swing.Publisher$class.$init$(Publisher.scala:34) 
    at scala.swing.Window.<init>(Window.scala:25) 
    at scala.swing.Frame.<init>(RichWindow.scala:77) 
    at scala.swing.MainFrame.<init>(MainFrame.scala:19) 
    at UI.<init>(UI.scala:3) 
    at GuiProgramOne$.main(UI.scala:11) 
    at GuiProgramOne.main(UI.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
[trace] Stack trace suppressed: run last compile:run for the full output. 
java.lang.RuntimeException: Nonzero exit code: 1 
    at scala.sys.package$.error(package.scala:27) 

Verzeichnisstruktur:

. 
├── build.sbt 
├── GUI.class 
├── GUI$.class 
├── lib 
│   └── scala-swing-2.9.1.jar 
├── project 
│   └── target 
│    └── config-classes 
│     ... 
├── target 
│   └── streams 
│    ... 
└── GUI.scala 

build.sbt:

lazy val root = (project in file(".")). 
    settings(
    inThisBuild(List(
     scalaVersion := "2.10.5" 
    )), 
    name := "Game of Life", 
    libraryDependencies ++= Seq(
     "org.scala-lang" % "scala-swing" % "2.9.1" 
    ) 
) 

code: http://otfried.org/scala/index_28.html

Antwort

0

Ihre scala-Version ist 2.10.5 und daher sollte die scala-swing-Version skalieren - swing-2.10.5.jar. so sollten Sie Ihre build.sbt Datei ändern, wie unten gezeigt

libraryDependencies ++= Seq(
     "org.scala-lang" % "scala-swing" % scalaVersion.value 
    ) 

und Sie nicht die scala-swing-2.9.1.jar in Ihrem lib benötigen, da Sie bereits die Abhängigkeit in build.sbt erklärt. Entfernen Sie es daher, um mögliche Kollisionen zwischen den verwalteten und nicht verwalteten Abhängigkeiten zu vermeiden.

+0

hurra, danke, das hat funktioniert !! Ich habe tatsächlich versucht, sie beide 2.10.6 zu machen und es hat nicht funktioniert, aber 10.5 funktioniert. Ich weiß nicht warum, aber ich nehme es für jetzt. :) – Xianny

+0

willkommen !! .. :) –