CMD Compiler Error

SnowDay

Mitglied
Hey an Alle Java-Experten unter euch,

ich wollte mich mal daran setzen Java Programm in der Konsole zu starten und auszuführen, habe mit einem ganz einfachen Hello World. Programm angefangen, dass hat auch ganz gut geklappt, jedoch gab es jetzt bei meinem Programm was ich fertig habe 21 Fehler:

Fehler "23 - 28" Error: Package javax.mail does not exist
Die restlichen sind Error: Cannot find symbol;

Etc.

Was muss ich im Java Programm selber ändern oder hinzufügen/angeben damit das über die Kommandozeile läuft?
Ist btw. ein kleines Mail Versand Programm und habe die library mit javax mail etc. erweitert.
Mit zwei Klassen:
1. Klasse Personen, dort werden die ganzen Personen hinterlegt
2. Main Klasse dort wird die Verbindung erzeugt, die Nachricht und alles Versendet etc.

Kann mir da jemand bitte helfen?
 
Du hast wahrscheinlich die mail-lib nicht hinzugefügt?!
So wäre der Aufbau:
Code:
java -classpath someDir\lib1.jar;someOtherDir\lib2.jar your.package.YourClass
 
Hey Max,

nein habe ich nicht, habe ganz normal in der CMD javac Name.Java

Also müsse man schreiben:

javac -classpath "Pfad der ersten Lib; Pfad der Zweiten Lib;" Name.java?

@Zeigt mir immer noch die selben Fehler an/ aber nur bei der Main Klasse, die erste Klasse hat er erfolgreich Compiliert.
 
Hey Max,

neben der generellen Lib habe ich die zwei Imports Javax. Mail und sqlite-jdbc

Mein Befehl sieht so aus:

javac - classpath C:\Users\Devon\Desktop\javax.mail;C:\Users\Devon\Desktop\sqlite-jdbc-3.8.11.2 VersandTest.java
 
Hey Max,

danke das hat die Fehler "nur" noch auf 6 reduziert:

qaqyyaqwsxedc.PNG


@ Hängt vlt. damit zusammen, dass die Hauptmethode die Klasse Person mit verwendet, wie mache ich das nun?
 
du muss das ein Verzeichnis höher machen, also im src-Verzeichnis.
Und dann javac ... Funktion\Geburtstag.java statt javac ... Geburtstag.java aufrufen
 
Hey Max,

ne da jammert der mich auch voll nur anders:

yaqxswcdevfrbgtrnhzmju.PNG

*.java --> File Not Found

nach dem letzen jar -->
src\Funktion\*.java --> Funktioniert

Aller dings habe ich jetzt 3 Dateien als Class Datei
Jeweils der gleiche Name meiner Klassen und eines mit dem $ Zeichen, welches soll ich denn jetzt benutzen um mein Programm in Cmd auszuführen?
 
Man benutzt keine Class-Files, um Programme auszuführen. Man gibt an, wo nach Klassen gesucht werden sollen (Classpath) und gibt inkl. Paket an, von welcher Klasse die main-Methode verwendet werden soll.

Code:
java -cp lib1.jar;lib2.jar;src Funktion.KlasseMitMainMethode
 
Aller dings habe ich jetzt 3 Dateien als Class Datei
Jeweils der gleiche Name meiner Klassen und eines mit dem $ Zeichen, welches soll ich denn jetzt benutzen um mein Programm in Cmd auszuführen?
Die Class-Datei ist der compilierte Code, in den deine .java-Datei übersetzt wurde.
Immer dann, wenn du eine Klasse (im code oder direkt per cmd) ansprechen willst, dann sucht Java nach einer gleichnamigen .class-Datei.
Dabei werden package-Namen durch Verzeichnisnamen ersetzt.
Wenn du also z.B. das aufrufst
<code>java subPackage.ClassName</code>
dann sucht Java nach der Datei "./subPackage/ClassName.class" und ruft dort die Main-Methode auf.

src\Funktion\*.java --> Funktioniert
Das ist nicht optimal. Wenn du schon von einem nicht extra dafür bereitgestellten build-Verzeichnis aus kompilieren willst, dann geh mit "cd src" erst mal in das Source-Verzeichnis rein, bevor du irgend was anderes machst.

Schau dir mal Ant an, das stellt viele Werkzeuge zum Kompilieren und zum Erstellen der Jar bereit.

Grundsätzlich gilt:
1. Halte dich an eine Verzeichnisstruktur: "src" für SourceCode, "build" für Klassendateien, "dist" für die fertige .jar-Datei
2. Kompiliere in den Build-Ordner. Gehe entweder direkt dort rein und ruf von dort aus deinen Kompilier-Befehl auf oder gib ihn als Destination-Parameter mit an.
3. Ja, du musst jede .java-Datei einzeln angeben. *.java funktioniert zwar, aber du musst sagen, wo sie liegen, wie z.b. projectfolder/src/packagename/*.java
Damit tust du dir aber keinen Gefallen. Besser ist, per DOS oder ANT eine Auflistung aller .java-Dateien im src-Ordner erstellen zu lassen und diese Liste weiterzugeben an den javac-Befehl. Mit DOS passiert das über eine sogenannte Pipeline, Ant stellt bessere Werkzeuge dafür zur Verfügung. An den Ant-javac-Task kann man die zu kompilierende(n) Datei(en) entweder direkt oder über eine FileList übergeben.
 
Als Build-Tool würde ich eher Maven empfehlen, da dieses in der Bedienung um ein Vielfaches einfacher ist (so lange man nichts ausgefallenes will), da es nach dem Prinzip Convention over Configuration arbeitet.

Mit mvn archetype:generate lässt sich interaktiv ein Projekt inkl. POM anlegen, im POM ggf. noch maven.compiler.source und .target auf die gewünschte Java-Version festlegen und das war's. Übersetzt wird einfach mit mvn install. Man erhält dann z. B. ein jar im target-Verzeichnis.
 

Neue Themen


Zurück
Oben