Domanda

Sto avendo problemi con l'utilizzo di vasi esterni nel mio file. Ho sempre trovato:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration`  
at this line: `Configuration config = HBaseConfiguration.create();

E questo file è sul classpath, sto impostando le opzioni durante l'esecuzione jar:

$ java -jar hbase.jar -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*"

Questo file viene compilato con successo dopo il richiamo di questo comando:

$ javac -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*" HBaseScanner.java

Cosa fare?

È stato utile?

Soluzione 3

Il mio problema era che stavo installando classpath utilizzando l'opzione -classpath e vaso in esecuzione, che fa sì che l'opzione -classpath per essere ignorato.

Ho aggiunto vasetti in file manifesto e funziona.

Questo è problema simile: Impostazione di più vasi in java classpath

Altri suggerimenti

JVM getterà java.lang.NoClassDefFoundError se il caricatore di classe non è possibile inizializzare i membri statici di una classe, per esempio viene generata un'eccezione. Oppure, se non riesce a trovare un'altra classe a cui si accede da un inizializzatore statico in questa classe. Questo appare come ciò che sta accadendo, quando i pneumatici di classe Loader per caricare HBaseConfiguraton, questa classe HBaseConfiguration si aspetta qualcosa che Cannon ottenere che porta a un'eccezione, che si perde.
Che sfortuna debug questo tipo di guasti.
MODIFICARE: Il modo più semplice per capire ciò che manca è quello di lanciare il programma in un debugger con tutte le sorgenti collegate HBase, dicono in Eclipse, e traccia la chiamata HBaseConfiguration.create().

Sarebbe davvero utile se java ci ha dato un errore o per lo meno un avvertimento in questa situazione. Credo che una soluzione è quella di eseguire il vostro vaso come questo

java -cp "myclasspath":myjarfile.jar MyClassname
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top