Wie kann man den Java Compiler für ein gesamtes Projektverzeichnis benutzen?
Die Sache ist eigentlich relativ simpel, Ich habe ein Projekt mit verschiedenen Dateien / packages, und möchte sie, sobald ich in irgendeiner Datei etwas geändert habe, das gesamte Verzeichnis neu kompillieren.
Derzeit ist es leider so dass immer nur die Main Klasse neu kompilliert, und alle anderen .java Dateien nicht. Er verwendet dann immer die schon vorhandenen .class Dateien, ich muss also zuerst alle .class Dateien löschen, und dann Main.java neu kompillieren damit es geht.
Das ist ziemlich nervig und ich bin mir sicher dass das auch anders gehen sollte. Weiß zufällig jemand wie ?
Ich habe jetzt keine Lust mir irgendwie ein .sh Skript zu basteln was das ganze im Terminal von alleine macht, und auf zb. Make habe ich auch keine Lust.
Wieso verwendest du keine IDE (IntelliJ/Eclipse/NetBeans/...)?
Ich verwende VSCode zum editieren, mache das ganze compiling-Zeugs aber über das Terminal.
Also ich verwende Linux
3 Antworten
Ich würde dazu raten, mit einer IDE zu arbeiten. IntelliJ IDEA gibt es bspw. auch in einer Community Edition.
Wenn du bei VS Code bleiben möchtest - auch dort kannst du Maven / Gradle / o.ä. integrieren.
Für eine Lösung über die Konsole würde ich dem Compiler ein Zielverzeichnis (-d) übergeben und dass dann via Bash jedesmals erst löschen.
Ich vermute, weil er dafür erst schauen müsste, wie man die Dateien allesamt richtig löscht. Standardmäßig wirft der Compiler die class-Dateien in dasselbe Verzeichnis, in dem auch die java-Dateien liegen. Beim Löschen ist daher eine Filterung vonnöten.
Ich kann ja einmal die dazu notwendigen Befehle teilen. Ob man sie nutzt oder nicht, sei dem Leser überlassen.
Mit
rm -rfv *.class
würde man ausgehend vom aktuellen Verzeichnis alle Dateien und Ordner mit der Namensendung .class entfernen.
Bei Nutzung eines extra Ausgabeverzeichnis kann man so den Ordner leeren:
rm -rfv nameDesAusgabeVerzeichnis/*
Erklärt wird der rm-Befehl auf dieser Seite.
Wie genau verwendest du denn den Compiler?
Denn es klingt fast so, als scheitert es schon da. Machst du es auch so wie folgt?
"Du musst dem compiler jede Datei angeben, die du kompiliert haben möchtest, immer nur die main neu zu kompilieren reicht nicht. Auch deine Datei Huhu.java musst du angeben.
Du kannst aber wenigstens wildcards nutzen:
javac *.java dir1/*.java dir2/*.java dir1/dir3/*.java etc
So musst du nicht die Dateinamen selbst angeben, aber immernoch die Struktur der Ordner.
Das ist mühselig bei größeren Projekten. Aber einmal eingetippt, kannst du ja mit Pfeiltasten den Befehl wieder schnell aufrufen oder du nutzt deine IDE auch fürs compilen."
Wenn nicht, dann ist es ein anderes Problem.
im Terminal javac Main.java...
Ich hab aber schon rausgelesen dass der Java compiler das nicht kann.
Ich hab mir deswegen jetzt ein kleines bash-script zusammengebaut, das macht das ganze auch und ich muss mir jetzt nicht direkt make für ein Projekt mit 3 Paketen verwenden.
Und was kommt da bei "..."?
Und was macht dein Shell-Skript nun anders als javac mit allen *.java Dateien aufzurufen?
Dass ich jedes Mal diesen ewig langen command aufrufen muss...
Tja , wird dann wohl nix . Schaff Dir eine IDE an und lass es die Intelligent lösen .
Falls Dir die Antwort nicht gefallen sollte, dann kannst Du sie ja gerne Melden . Löst dein Problem aber nicht.
Das ist ziemlich nervig und ich bin mir sicher dass das auch anders gehen sollte
z.b. mit einer IDE entsprechende intelligente PlugIns . Ansonsten viel Spaß bei der Suche, wenn Du dir da so sicher bist.
p.s. übrigends , genau das machen IDEs sie bauen ein makefile im hintergrund .
Hmm, ich finde es zwar ein wenig "seltsam" dass eine Sprache in der man dazu forciert wird in Klassen / Paketen zu schreiben, dazu nicht ohne weiteres in der Lage ist, aber okay, ist dann halt so...
Ich hab mir jetzt einfach ein kleines .sh Skript gebastelt, dann klappt es auch mit einem einzigen Kommand.
Ich finds nur irgendwie lustig, da man Leute die zb Vim verwenden wollen damit eigentlich komplett aussperrt.
Ein Script will der Fragesteller aber ausdrücklich nicht. Warum auch immer.