2016-04-21 9 views
0

Ich habe ein Paket mit vielen Dateien und Verzeichnissen (Californium, eine CoAP-Protokollimplementierung). Es kommt als Maven-Projekt. Ich bin in das Verzeichnis der Datei pom.xml gegangen und habe mvn package im Terminal ausgeführt. Alles lief gut. Aber wenn ich zu einem der Beispiele (Helloworldserver.class) gehe und versuche, es mit java HelloWorldServer auszuführen, bekomme ich:Welchen Pfad zum Schreiben in java -classpath?

Error: Could not find or load main class HelloWorldServer.

Ich schaue auf den Klassenpfad durch Eingabe echo $CLASSPATH und ich bekomme nichts. Also versuche ich, den Classpath zu setzen:

java -classpath org.eclipse.californium.examples 

die eine Beschreibung aller möglichen Optionen für die Java-Befehl generiert, und stellt nicht die Classpath.

wählte ich den Classpath in dem obigen Befehl, weil in der HelloWorldServer.java, ist es die erste Zeile:

package org.eclipse.californium.examples; 

Ich vermute, das ist falsch, durch die Ausgabe von meinem Kommando zu urteilen. Wie ist der richtige Pfad anzugeben? Worauf möchte ich hinweisen?

+0

'mvn-Paket' sollte eine JAR-Datei in' target' erstellt haben. Das kann alle Abhängigkeiten enthalten oder nicht und/oder ausführbar sein. Vielleicht enthält das Projekt einige Shell-Skripte, um es auszuführen? Oder zumindest eine README? – Thilo

+0

Ah, ja. Es gibt eine Jar-Datei. Aber nachdem ich es ausgeführt habe, bekomme ich denselben Fehler, aber stattdessen den Namen der JAR-Datei. – Sahand

Antwort

0

Wenn Sie den Code mit Maven erstellt haben, hat er ein "target" -Verzeichnis erstellt und darin einen "classes" -Verzeichnisbaum, der die vom Compiler erzeugten Klassendateien enthält.

Finden Sie das "target/classes" -Verzeichnis oder wie es heißt. (Es wird "target/classes" in der Standard-Maven Dateistruktur genannt, aber die POM-Datei nichts anderes angeben könnte.)

nun die Anwendung wie folgt ausführen:

$ java -classpath target/classes:<dependency-1>:<dependency-2>:... \ 
     org.eclipse.californium.examples.HelloWorldServer 

wo <dependency-1> und <dependency-2> und so weiter sind die Pfadnamen für die Abhängigkeit JAR-Dateien ... wie in Ihrem lokalen .m2 Repo von Maven heruntergeladen.


Das allgemeine Muster, das die -classpath Parameter ein Semikolon getrennte ist Liste von Verzeichnisnamen, jar/zip Dateinamen oder jar/zip-Datei Muster. Wenn Sie Klassen ausführen, die nicht in eine JAR- oder ZIP-Datei gepackt wurden, müssen Sie das Stammverzeichnis der Klassenstruktur angeben. Zum Beispiel, wenn der vollständige Name für Ihre HelloWorldServer Klasse ist

org.eclipse.californium.examples.HelloWorldServer 

dann das Zielverzeichnisbaum wird wie folgt aussehen:

... 
    target: 
    classes: 
     org: 
     eclipse: 
      californium: 
      examples: 
       HelloWorldServer.class 

Die "target/classes" ist das richtige Root-Verzeichnis. Der Befehl java versucht, basierend auf der Paketbenennung zur Datei "HelloWorldServer.class" zu navigieren.

Diese Mitteilung nicht versucht sein, zu tun:

$ java -classpath target/classes/org/eclipse/californium/examples:... \ 
    HelloWorldServer.class 

Es wird nicht funktionieren.


1 - oder ein Semikolon unter Windows.