vasi esterni e HBase in classpath
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?
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