2010-11-18 2 views
3

J'ai essayé d'installer sbt pour commencer à utiliser Scala version 2.8 dans Ubuntu. (Je suis actuellement en utilisant la version 2.7.)Essayer d'exécuter sbt sur Ubuntu. (Erreur: java.lang.NoClassDefFoundError: scala/ScalaObject)

Quand je lance sbt du terminal, je reçois la sortie suivante:

$ 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 

Toutes les idées que je fais mal?

+0

S'il vous plaît ajouter comment vous définissez votre script 'sbt', et assurez-vous ce fichier jar se trouve dans le même répertoire que 'sbt'. –

Répondre

2

Cette erreur se produit lorsqu'une version Scala incorrecte est utilisée. Comme SBT gère seul Scala, ma suggestion est que vous supprimer tout paquet Scala que vous avez pu installer.

+0

Cela a fonctionné pour moi. Maintenant, bien que je ne puisse pas me procurer une bonne scala read/eval/print-loop en tapant 'scala'. Puis-je lancer facilement une console "scala" via sbt? (Je me rends compte que je peux le faire si je crée un projet en premier, mais cela semble être une surcharge pour lancer le scala) – aioobe

+0

@aioobe Essayez d'installer Scala à la main, en le téléchargeant depuis scala-lang, puis en l'ajoutant au chemin de votre profil de la maison. Je ne sais pas pourquoi le paquet d'Ubuntu cause des problèmes, mais il doit faire quelque chose hors de l'ordinaire, puisque je n'ai aucun problème à faire fonctionner SBT et avoir une Scala installée à la main. –

+0

Aha. Ce pourrait être une bonne idée. Merci pour le conseil. – aioobe

0

Avez-vous défini correctement la variable d'environnement $SCALA_HOME?

je vis les Conky GUI Ubuntu project having a similar issue (en bas de la page, non pas avec SBT directement, mais avec Scala), et est ici le script qu'ils utilisent maintenant pour vous assurer et définir toutes les variables liées Scala:

(Le tout script est probablement pas pertinente pour votre script SBT, mais il vous donne une idée sur la définition $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 $? 
+1

Mais SBT installe sa propre Scala. Le problème peut arriver parce qu'il a installé Scala, et non l'inverse. –

2

Essayez un redémarrage sbt après la suppression:

  1. ~/.m2/repository
  2. ~/.ivy2/cache
  3. project/boot

Comme décrit dans sbt troubleshooting

Questions connexes