2012-04-30 3 views
11

Ok Ich weiß, diese Frage wurde viele viele Male zuvor gestellt, aber ich habe es googelt und sah Beispiele und Fragen auf SO für den letzten Monat, und ich ernst kann das nicht zur Arbeit bringen. Ich denke, das Problem ist, dass ich das Programm sowohl von Eclipse als auch von der Befehlszeile aus ausführen kann. Ich benutze auch OSX und ich denke, dass viele der Beispiele, die ich lese, für Windows/Linux sind.Hinzufügen von Jar zu Classpath bei der Ausführung von der Befehlszeile

Wenn ich ein einfaches Programm zusammengestellt in Eclipse, die ich von der Kommandozeile ausgeführt werden soll ich dies tun:

java -cp bin MyProgram 

Ich habe ein anderes Programm, das ich kompilieren und in Eclipse ausführen, und dies verweist auf die MySQL JDBC Connector (mysql-connector-java-5.1.19-bin.jar), der im selben Verzeichnis gespeichert ist. Dies funktioniert in Eclipse einwandfrei, aber ich kann es nicht über die Befehlszeile ausführen.

ich alle Kombinationen von Dingen versucht haben ...

java -classpath "bin;mysql-connector-java-5.1.19-bin.jar" MyProgram 
java -cp bin\;mysql-connector-java-5.1.19-bin.jar MyProgram 

und alle Arten von Klasse erhalten keine Fehler gefunden ...

Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram 
Caused by: java.lang.ClassNotFoundException: MyProgram 
    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:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
+0

Hallo Matt, wenn ich nicht irre ich glaube, das Classpath ist der Pfad zu der Hauptklasse, die Sie ausführen möchten, zu erklären. Also in diesem Fall, wenn Ihre Klasse im bin-Ordner ist, würde ich einfach versuchen: Java MyProgram oder Java-Cp Myprogrammath MyProgram –

+1

@FedericoGiust Nicht speziell; Classpath definiert nur ein Archiv oder einen Pfad zu einer Gruppe von Klassen. Der Klassenpfad kann die Runnable-Klasse enthalten oder nicht (was normalerweise zu einem Ausnahme- oder Straight-Up-Java.exe-Fehler führt). Classpath kann Verzeichnisse und Archive enthalten, die keine ausführbaren Klassen haben. – Qix

+0

mögliches Duplikat von [Java-Befehlszeile mit externem .jar] (http://stackoverflow.com/questions/6069702/java-command-line-with-external-jar) –

Antwort

13

Ihr Problem ist Min Separator Sie verwenden. Trennzeichen ; ist für Windows. Auf Unix-Systemen sollten Sie : verwenden statt:

java -classpath "ist: mysql-connector-java-5.1.19-bin.jar" MyProgram

0

Sie nicht Ihre Hauptklasse in classpaht gesetzt , versuchen ./ in -cp

+0

Ich bezweifle, dass das aktuelle Verzeichnis seine Hauptklasse enthält, Ich würde glauben, dass "bin" diese enthält. –

+0

das 'MyProgram' muss in den classpath eingetragen werden, auch wenn Sie' MyProgram' in das Paket einfügen, müssen Sie den Pachagenamen hinzufügen. – user1335794

+0

Keine Sorge, ich weiß alles über Klassenpfad und voll qualifizierten Namen. Ich sage nur, dass das Hinzufügen des aktuellen Verzeichnisses zum Klassenpfad nutzlos ist, wenn sich seine Klassen im Verzeichnis bin befinden. –

5

Verwenden Sie ein Add ':' Ihre Eingaben auf Unix-Systemen zu trennen:

java -classpath "bin:mysql-connector-java-5.1.19-bin.jar" MyProgram 
java -cp bin:mysql-connector-java-5.1.19-bin.jar MyProgram 

Eclipse konvertiert es automatisch.

+0

Jeder Grund für die Flucht Doppelpunkt? –

+0

nein, nur schlecht schneiden/einfügen ... Ich habe es behoben – mprivat

-2

ich sehr empfehlen würde Sie --jar oder -jar versuchen . Ich kann mich nicht erinnern, was es ist, aber diese sollten dich beruhigen. Auch wenn Sie die Dev-Tools von Apple haben, haben sie einen Jar-Packer.

+1

Es ist -jar, aber obvisouly seine Klassen sind nicht aufgemotzt. Vergessen Sie Apple Dev Tools, die aus dem vorigen Jahrhundert stammen. Eclipse, NetBEans und IntelliJ sind Lichtjahre voraus. –

+0

@GuillamePolet Agrred, aber ich habe nur erwähnt, dass sie mit einem Dienstprogramm für die Herstellung von Apps aus Gläsern kommt –

1

Siehe:

String pathSeparator = System.getProperty("path.separator"); 
Verwandte Themen