Wie man eine Klasse aus einem jar mit der Kommando-Zeile mit classpath angegeben
Ich versuche zu laufen eine Klasse aus einem JAR. Diese Klasse ist NICHT nur die wichtigste Klasse in diesem Glas. Auch, es erfordert eine Reihe von anderen jar-Dateien, die ich gehalten habe, in das gleiche Verzeichnis wie das Jar. Die Befehle, die ich versucht haben, sind wie folgt:
(mydir das Verzeichnis, in dem alle meine Gläser befinden, mithilfe der Windows-Plattform)
mysql-connector-java-5.1.13-bin.jar
ist erforderlich für myProjImport.jar
zu laufen und zu com.mycomp.myProj.importer.csv.TestImporter
ist die Klasse, die ich versuche zu laufen.
"C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties"
und "C:\temp\apollo_claims_test.txt"
sind die Kommandozeilen-Argumente, die von der Klasse TestImporter
Hier ist was ich versucht habe:
mydir>java -cp C:\temp\test_myProj\mysql-connector-java-5.1.13-bin.jar;. myProjImport.jar com.mycomp.myProj.importer.csv.TestImporter "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" "C:\temp\apollo_claims_test.txt"
Und hier ist der Fehler:
Exception in thread "main" java.lang.NoClassDefFoundError: myProjImport/jar
Caused by: java.lang.ClassNotFoundException: myProjImport.jar
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: myProjImport.jar. Program will exit.
Kann mir bitte jemand sagen, welchen genauen Befehl muss ich ausführen?
InformationsquelleAutor Bhushan | 2011-05-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen:
java -cp C:\temp\test_myProj\mysql-connector-java-5.1.13-bin.jar;myProjImport.jar com.mycomp.myProj.importer.csv.TestImporter "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" "C:\temp\apollo_claims_test.txt
"sofern Ihr Betrieb diese aus dem gleichen Verzeichnis wie myProjImport.jar
;
separator unter Windows.uups, in diesem Fall: java -cp C:\temp\test_myProj\mysql-connector-java-5.1.13-bin.jar;myProjImport.jar com.mycomp.myProj.Importeur.csv.TestImporter "C:\Documents und Einstellungen\user\workspace\myProjImport\src\conf\datasource.Eigenschaften" "C:\temp\apollo_claims_test.txt
Dank Karthik und ykaganovich, Ihre Lösung funktioniert. Karthik, bitte machen Sie die Korrektur, die ykaganovich vorgeschlagen hat- ';' statt ':' denn dies ist für die Windows-Plattform.
InformationsquelleAutor Karthik Ramachandran
Wenn -jar-option angegeben ist, jede andere Klasse Weg Optionen werden ignoriert. So wird dies nicht funktionieren:
Aber wenn man foo.jar name in META-INF/manifest.mf in MyJar.jar:
Dann die foo.jar gesucht wird auf der gleichen Ebene wie MyJar.jar, d.h. im gleichen Verzeichnis.
Manchmal habe ich nur entpacken alle abhängigen jar-Dateien und packen Ihre Inhalte in MyJar.jar. Weniger Abhängigkeiten auf diese Weise.
Der Doppelpunkt ist wichtig.
Ich will nicht zu sein schuldig von java-bashing, aber warum? warum? warum? kann ich nicht angeben extra-Klasse-Pfade beim ausführen einer jar??
InformationsquelleAutor Vladimir Dyuzhev