2010-01-25 6 views
5

Ich bin neu in Java und bin nicht sicher, wie ich von einem separaten Programmjar aus auf eine Klassendatei in einem bestimmten Verzeichnis zugreifen kann.Einstellen des Java-Klassenpfads zum Laden einer Klassendatei

Zum Beispiel, ich habe eine dritte Partei JAR-Datei in/befindet, die angeblich MyClass in /mylib/MyClass.class sich zu laden, also versuchte ich laufen:

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

aber ich bin immer der Fehler:

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) 

Was mache ich falsch?

Antwort

11

Wenn Sie "-jar" dann nur das Class-Path Attribut definiert in der META-INF/MANIFEST.MF Datei innerhalb der jar-Datei verwenden, den Classpath beeinflussen.

Es ignoriert auch das MyClass Argument (oder genauer gesagt: interpretieren Sie es als ein Argument für die Hauptklasse in der MANIFEST.MF definiert).

Wenn Sie einfach eine Klasse aus diesem Glas es so nennen nennen wollen:

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

In der Befehlszeile Sie versuchen MyClass als Programm auszuführen, das auf der Basis Ihrer Beschreibung ist nicht das, was Sie wollen.

Sie müssen herausfinden, was die Hauptklasse ist, die verwendet wird, um das Programm im Jar auszuführen. Sie könnten die JAR-Datei mit jar -xf mainprog.jar entpacken und die Datei META-INF/MANIFEST.MF ansehen. Es sollte einen Eintrag haben, der anzeigt, dass die Hauptklasse des Jars ist (ich kann mich nicht mehr an den Namen des Eintrags erinnern).

Nachdem als Kommandozeile zu etwas wie folgt ändern:

java -classpath /mainprog.jar:/mylib package.name.to.jar.MainClass 
Verwandte Themen