2010-01-25 18 views
5

Sono nuovo di Java e non sono sicuro di come accedere a un file di classe situato in una directory specifica da un jar di programma separato.Impostazione percorso classe Java per caricare un file di classe

Per esempio, ho un terzo file jar parte si trova in /, che dovrebbe caricare MyClass situati in /mylib/MyClass.class, così ho provato a fare funzionare:

java -jar mainprog.jar -classpath "/mylib" MyClass 

ma mi sto l'errore:

Exception in thread "main" java.lang.NoClassDefFoundError: MyClass 
Caused by: java.lang.ClassNotFoundException: MyClass 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:221) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:209) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:324) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:269) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:337) 

Cosa sto facendo male?

risposta

11

Quando si utilizza "-jar" allora solo l'attributo Class-Path definita nel file META-INF/MANIFEST.MF all'interno del file jar influenzerà il percorso di classe.

Ignora anche l'argomento MyClass (o più precisamente: lo interpreta come argomento per la classe principale definita nello MANIFEST.MF).

Se si desidera semplicemente chiamare una classe da quel vaso chiamare in questo modo:

java -cp mainprog.jar:/mylib MyClass 
// or using this one on windows: 
java -cp mainprog.jar;/mylib MyClass 
2

nella riga di comando che si sta tentando di eseguire MyClass come un programma, che sulla base di descrizione non è quello che volere.

È necessario capire quale sia la classe principale utilizzata per eseguire il programma nel jar. È possibile decomprimere il file jar con jar -xf mainprog.jar e osservare il file META-INF/MANIFEST.MF. Dovrebbe avere una voce che indica che la classe principale del barattolo è (non riesco a ricordare il nome della voce in questo momento).

Dopo di modificare la riga di comando per qualcosa di simile:

java -classpath /mainprog.jar:/mylib package.name.to.jar.MainClass 
Problemi correlati