Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    15

    NoClassDefFoundError con comando java

    Salve,

    ho bisogno di chiarirmi un dubbio.

    Mi trovo in una cartella con il mio file Test.java che contiene l'omonima classe con metodo main.
    La compilo in 2 modi con eguale efficacia con "javac Test.java", o con "javac test/Test.java" sopo essere risalito nella cartella superiore.
    In entrambi i casi ottengo il mio file Test.class nella cartella "test".
    Dall'interno di "test" digito "java Test" e il programma parte.
    Dalla cartella superiore digito "java test.Test" e va in errore "NoClassDefFoundError".
    Ma non dovrebbe funzionare lo stesso specificando il package di appartenenza allo stesso modo con cui lo posso compilare dalla cartella superiore a test?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Il comando "java" riceve il nome di una classe (ed eventuali opzioni specificate prima) oppure il nome di un Jar.

    codice:
    Usage: java [-options] class [args...]
               (to execute a class)
       or  java [-options] -jar jarfile [args...]
               (to execute a jar file)
    where options include:
        -d32          use a 32-bit data model if available
        -d64          use a 64-bit data model if available
        -server       to select the "server" VM
        -hotspot      is a synonym for the "server" VM  [deprecated]
                      The default VM is server.
    
        -cp <class search path of directories and zip/jar files>
        -classpath <class search path of directories and zip/jar files>
                      A ; separated list of directories, JAR archives,
                      and ZIP archives to search for class files.
        -D<name>=<value>
                      set a system property
        -verbose:[class|gc|jni]
                      enable verbose output
        -version      print product version and exit
        -version:<value>
                      require the specified version to run
        -showversion  print product version and continue
        -jre-restrict-search | -no-jre-restrict-search
                      include/exclude user private JREs in the version search
        -? -help      print this help message
        -X            print help on non-standard options
        -ea[:<packagename>...|:<classname>]
        -enableassertions[:<packagename>...|:<classname>]
                      enable assertions with specified granularity
        -da[:<packagename>...|:<classname>]
        -disableassertions[:<packagename>...|:<classname>]
                      disable assertions with specified granularity
        -esa | -enablesystemassertions
                      enable system assertions
        -dsa | -disablesystemassertions
                      disable system assertions
        -agentlib:<libname>[=<options>]
                      load native agent library <libname>, e.g. -agentlib:hprof
                      see also, -agentlib:jdwp=help and -agentlib:hprof=help
        -agentpath:<pathname>[=<options>]
                      load native agent library by full pathname
        -javaagent:<jarpath>[=<options>]
                      load Java programming language agent, see java.lang.instrument
    
        -splash:<imagepath>
                      show splash screen with specified image
    See http://www.oracle.com/technetwork/java/javase/documentation/index.html for m
    ore details.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da ShuBaarb Visualizza il messaggio
    Mi trovo in una cartella con il mio file Test.java che contiene l'omonima classe con metodo main.
    La compilo in 2 modi con eguale efficacia con "javac Test.java", o con "javac test/Test.java" sopo essere risalito nella cartella superiore.
    In entrambi i casi ottengo il mio file Test.class nella cartella "test".
    Dall'interno di "test" digito "java Test" e il programma parte.
    Dalla cartella superiore digito "java test.Test" e va in errore "NoClassDefFoundError".
    Ma non dovrebbe funzionare lo stesso specificando il package di appartenenza allo stesso modo con cui lo posso compilare dalla cartella superiore a test?
    La classe è in un package? Intendo innanzitutto: all'inizio del sorgente c'è un

    package qualcosa;

    ?

    Se non c'è, la classe è nel package di "default" (unnamed, senza nome). Se c'è, la classe ha il nome completamente qualificato qualcosa.Test.

    La regola fondamentale: i nomi dei package devono "riflettersi" nei nomi delle cartelle. Quindi se la classe fosse com.esempio.Test, allora Test.class deve essere sotto una cartella com/esempio. E la directory che contiene la "com" deve essere in classpath.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    15
    Capperi, hai ragione! Avevo dimenticato di dichiarare "package test" all'inizio del sorgente!
    Grazie mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.