2 Stimmen

Wie man eine Klasse aus einem Jar mit von der Kommandozeile mit Klassenpfad angegeben ausführen

Ich versuche, eine Klasse aus einer JAR-Datei auszuführen. Diese Klasse ist NICHT die einzige Hauptklasse in diesem JAR. Außerdem benötigt sie eine Reihe anderer JAR-Dateien, die ich im selben Verzeichnis wie diese JAR-Datei gespeichert habe. Die Befehle, die ich ausprobiert habe, lauten wie folgt:

(mydir ist das Verzeichnis, in dem sich alle meine Jars befinden, bei Verwendung der Windows-Plattform)

mysql-connector-java-5.1.13-bin.jar wird benötigt für myProjImport.jar zu laufen und com.mycomp.myProj.importer.csv.TestImporter ist die Klasse, die ich auszuführen versuche. "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" y "C:\temp\apollo_claims_test.txt" sind die Befehlszeilenargumente, die von der Klasse TestImporter Ich habe Folgendes versucht:

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 liegt 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 Befehl ich genau ausführen soll?

8voto

Karthik Ramachandran Punkte 11677

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 "

vorausgesetzt, Sie führen diese Datei aus demselben Verzeichnis aus wie myProjImport.jar

2voto

Vladimir Dyuzhev Punkte 17849

Wenn die Option -jar angegeben ist, werden alle anderen Klassenpfadoptionen ignoriert. Dies wird also nicht funktionieren:

java -jar MyJar.jar -classpath foo.jar

Wenn Sie jedoch den Namen foo.jar in META-INF/manifest.mf innerhalb von MyJar.jar:

Class-Path: foo.jar

Dann wird foo.jar auf der gleichen Ebene wie MyJar.jar gesucht, d.h. im gleichen Verzeichnis.

Manchmal entpacke ich einfach alle abhängigen JARs und packe ihren Inhalt in MyJar.jar. Auf diese Weise gibt es weniger Abhängigkeiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X