Il tentativo di eseguire SBT su Ubuntu. (Errore: java.lang.NoClassDefFoundError: Scala / ScalaObject)
Domanda
Ho cercato sbt
installazione per iniziare a utilizzare Scala 2.8 in Ubuntu. (Attualmente sto usando la versione 2.7.)
Quando lancio sbt
dal terminale ottengo il seguente output:
$ sbt
Project does not exist, create new project? (y/N/s) y
Name: HelloWorld
Organization: org
Version [1.0]:
Scala version [2.7.7]:
sbt version [0.7.4]:
Getting Scala 2.7.7 ...
:: retrieving :: org.scala-tools.sbt#boot-scala
confs: [default]
2 artifacts copied, 0 already retrieved (6214kB/279ms)
java.lang.NoClassDefFoundError: scala/ScalaObject
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at xsbt.boot.Provider$.classMissing$1(Provider.scala:71)
at xsbt.boot.Provider$$anonfun$getMissing$1.apply(Provider.scala:72)
at xsbt.boot.Provider$$anonfun$getMissing$1.apply(Provider.scala:72)
at scala.List.filter(List.scala:859)
at xsbt.boot.Provider$.getMissing(Provider.scala:72)
at xsbt.boot.Provider$initialize.call(Provider.scala:45)
at xsbt.boot.Provider$initialize.call(Provider.scala:32)
at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:63)
at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:67)
at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:67)
at xsbt.boot.Using$.withResource(Using.scala:11)
at xsbt.boot.Using$.apply(Using.scala:10)
at xsbt.boot.Locks$GlobalLock.withFileLock(Locks.scala:67)
at xsbt.boot.Locks$GlobalLock.liftedTree1$1(Locks.scala:45)
at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:45)
at xsbt.boot.Locks$.apply(Locks.scala:31)
at xsbt.boot.Provider$class.$init$(Provider.scala:31)
at xsbt.boot.Launch$ScalaProvider.<init>(Launch.scala:80)
at xsbt.boot.Launch$$anonfun$1.apply(Launch.scala:72)
at xsbt.boot.Launch$$anonfun$1.apply(Launch.scala:72)
at xsbt.boot.Cache.newEntry(Cache.scala:17)
at xsbt.boot.Cache.getFromReference(Cache.scala:13)
at xsbt.boot.Cache.apply(Cache.scala:12)
at xsbt.boot.Launch.getScala(Launch.scala:73)
at xsbt.boot.Launch$.run(Launch.scala:48)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:42)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:42)
at xsbt.boot.Launch$.launch(Launch.scala:57)
at xsbt.boot.Launch$.explicit(Launch.scala:42)
at xsbt.boot.Launch$.initialized(Launch.scala:38)
at xsbt.boot.Launch$.parsed(Launch.scala:31)
at xsbt.boot.Launch$.configured(Launch.scala:21)
at xsbt.boot.Launch$.apply(Launch.scala:16)
at xsbt.boot.Launch$.apply(Launch.scala:13)
at xsbt.boot.Boot$.runImpl(Boot.scala:24)
at xsbt.boot.Boot$.run(Boot.scala:19)
at xsbt.boot.Boot$.main(Boot.scala:15)
at xsbt.boot.Boot.main(Boot.scala)
Caused by: java.lang.ClassNotFoundException: scala.ScalaObject
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 62 more
Error during sbt execution: java.lang.NoClassDefFoundError: scala/ScalaObject
Tutte le idee che sto facendo male?
Soluzione
Questo errore si verifica quando si utilizza una versione non corretta Scala. Dal momento che SBT gestisce Scala da sola, il mio suggerimento è che si Rimuovi qualsiasi Scala crea un pacchetto si potrebbe avere installato.
Altri suggerimenti
Provare una sbt
riavvio dopo l'eliminazione:
-
~/.m2/repository
-
~/.ivy2/cache
-
project/boot
Come descritto in sbt risoluzione dei problemi
Do è stata impostata la variabile d'ambiente $SCALA_HOME
correttamente?
ho visto il href="http://ubuntuforums.org/archive/index.php/t-856370.html" rel="nofollow"> progetto ( in fondo alla pagina, non con SBT direttamente, ma con Scala), e qui è lo script che stanno ora utilizzando per assicurarsi che e impostare tutte le variabili Scala correlati:
(Il tutto script non è probabilmente rilevante per lo script SBT, ma ti dà un'idea su come impostare $SCALA_HOME
)
#!/bin/bash
set -e
#-----------------------------------#
# Functions #
#-----------------------------------#
function copy_variables_file {
# Copying variables.xml to ~/.conkygui
if [ ! -d ~/.conkygui ]; then
mkdir -v ~/.conkygui
fi
cp -vu /usr/share/doc/conkygui/variables.xml ~/.conkygui
}
function get_scala_home {
# check if $SCALA_HOME is set
if [ -z $SCALA_HOME ]; then
# try to find it at common locations
dists=('Fedora' 'Ubuntu')
paths=('/usr/share/scala' '/usr/share/java')
for indx in 0 1
do
SCALA_HOME=${paths[$indx]}
if [ -d $SCALA_HOME ]; then
break
fi
SCALA_HOME=''
done
fi
# check if $SCALA_HOME could be found
if [ -z $SCALA_HOME ]; then
echo '$SCALA_HOME is not set'
exit 2
else
echo $SCALA_HOME
return 0
fi
}
function get_scala_library_path {
SCALA_HOME=$1
scala_library=$SCALA_HOME'/scala-library.jar'
if [ -f $scala_library ] ; then
echo $scala_library
return 0
fi
# try with lib folder
scala_library=$SCALA_HOME'/lib/scala-library.jar'
if [ -f $scala_library ] ; then
echo $scala_library
return 0
else
echo 'error: scala-library.jar could not be found';
exit 1
fi
}
function get_classpath {
SCALA_HOME=$1
# Except for Scala the required libraries come
# with Conky GUI and are located in the "lib" folder.
lib_folder='/usr/share/conkygui'
bsaf=$lib_folder'/lib/bsaf-1.9-RC3.jar'
vldocking=$lib_folder'/lib/vldocking-3.0.0.jar'
conkygui=$lib_folder'/conkygui.jar'
libs=$bsaf':'$vldocking':'$conkygui
scala_library=`get_scala_library_path $SCALA_HOME`
classpath=$libs':'$scala_library
echo $classpath
}
#-------------------------------#
# RUN #
#-------------------------------#
copy_variables_file
SCALA_HOME=`get_scala_home`
echo 'SCALA_HOME: '$SCALA_HOME
classpath=`get_classpath $SCALA_HOME`
echo 'CLASSPATH: '$classpath
# start Conky GUI
java -cp $classpath controllers.ConkyGUI
exit $?