2010-06-16 18 views
7

Ho un singolo file .java (driver.java) Sto tentando di compilare ed eseguire dalla riga di comando. Utilizza la libreria esterna denominata EXT.jar, la cui struttura è solo una cartella denominata EXT con alcune dozzine di classi al suo interno.Problemi della riga di comando Java con le librerie .jar

Allora corro:

javac -cp EXT.jar driver.java 

Questo compila la classe più che bene.

poi quando corro:

java -cp EXT.jar driver 

ottengo un java.lang.NoClassDefFoundError.

Stranamente, se spacco il JAR (così ora ho una cartella nella directory radice chiamata EXT), l'ultimo comando funziona bene !! Il driver verrà eseguito!

C'è un modo per far sì che il driver.class cerchi i file di classe necessari da EXT.jar/EXT/*class invece di una cartella EXT effettiva?

Grazie!

risposta

18

Stai compilando la classe nella directory locale. Quindi, quando lo esegui, devi includere la directory corrente nel classpath. Ad esempio:

java -cp .;EXT.jar driver 

O in Linux:

java -cp .:EXT.jar driver 

Con il modo in cui lo avete ora, stai dicendo classpath è solo EXT.jar (insieme a tutto ciò che è in ambiente CLASSPATH variabile) e nient'altro (che è il motivo per cui la directory corrente, dove si trova driver.class, è esclusa)

+0

Perfetto! Grazie! – Monster

+0

Lo farà. A quanto pare ho bisogno di aspettare 15 minuti per accettare una risposta :) – Monster

+0

Grazie, Matt, la tua risposta ha funzionato per me in caso di un singolo barattolo, ma ora ho bisogno di usare un altro barattolo. Entrambi i jar sono in una cartella chiamata "libs" nel mio progetto. Ma non riuscivo a farlo funzionare. Sto usando Ubuntu. plz help – AndroidGuy

Problemi correlati