Der Anwendungsfall ist einfach. Ich habe die Quelldateien erhalten, die mit Eclipse erstellt wurden. Es gibt also eine tiefe Verzeichnisstruktur, in der jede Java-Klasse auf eine andere Java-Klasse im selben, untergeordneten, geschwisterlichen oder übergeordneten Ordner verweisen kann.
Wie kompiliere ich das Ganze mit javac vom Terminal aus?
java
compilation
javac
directory-structure
Euphorie83
quelle
quelle
Antworten:
Sie müssen alle Verzeichnisse kennen oder Platzhalter verwenden können.
quelle
javac $(find . -name "*.java")
.Mit Bash 4 können Sie einfach Globstar aktivieren
und dann tun
quelle
Wenn Sie nur Ihre Hauptklasse ausführen möchten (ohne die
.java
Dateien zu kompilieren , von denen die Hauptklasse nicht abhängt), können Sie Folgendes tun:oder
javac
würde automatisch alle Abhängigkeiten auflösen und auch alle Abhängigkeiten kompilieren.quelle
-sourcepath .
Option verwenden und dann die Hauptdatei für den gleichen Effektfind . -type f -name "*.java" | xargs javac
die Nummer 2 und diese Methode nur, wenn es einen einzigen Einstiegspunkt für die Hauptmethode gibt, der die gesamte App umfasst.Ich würde Jons Vorschlag annehmen und Ant verwenden, da dies eine ziemlich komplexe Aufgabe ist.
Wenn Sie jedoch entschlossen sind, alles in einer Zeile im Terminal abzurufen, können Sie unter Linux den Befehl find verwenden . Ich empfehle dies jedoch überhaupt nicht, da es keine Garantie gibt, dass beispielsweise Foo.java nach Bar.java kompiliert wird, obwohl es
Foo
verwendet wirdBar
. Ein Beispiel wäre:find . -type f -name "*.java" -exec javac {} \;
Wenn noch nicht alle Klassen kompiliert wurden, wenn es ein Haupt-Harness oder eine Treiberklasse gibt (im Grunde die, die Ihre Hauptmethode enthält), sollte das individuelle Kompilieren dieser Hauptklasse den größten Teil des Projekts kompilieren, auch wenn sie sich seitdem in verschiedenen Ordnern befinden Javac wird nach besten Kräften versuchen, Abhängigkeitsprobleme zu lösen.
quelle
find_gnu . -type f -name "*.java" | xargs javac
sobald die gnu-Version von find.exe in find_gnu.exe umbenannt wurde. Ich habe meine gnu find.exe von msysgit bekommen.for /f "usebackq" %f in (``dir /s /b *.java``) do javac %f
(Verwenden Sie einfache Anführungszeichen in,dir /s /b
aber ich kann keine Möglichkeit finden, es richtig zu formatieren.)find
Lösung ist problematisch, weil sie jede Java-Klasse separat kompiliert, was sie sehr langsam macht.Folgendes ist die Methode, die ich gefunden habe:
1) Erstellen Sie eine Liste von Dateien mit relativen Pfaden in einer Datei (z. B. FilesList.txt) wie folgt (entweder durch Leerzeichen oder durch Zeilen getrennt):
2) Verwenden Sie den Befehl:
Dadurch werden alle Dateien kompiliert und die Klassendateien im Klassenverzeichnis abgelegt.
Die einfache Möglichkeit, FilesList.txt zu erstellen, ist folgende: Wechseln Sie in Ihr Quellstammverzeichnis.
Dies wird jedoch den absoluten Pfad füllen. Verwenden Sie einen Texteditor "Alle ersetzen", um den Pfad zum Quellverzeichnis (einschließlich \ am Ende) durch "" (dh leere Zeichenfolge) und Speichern.
quelle
Die bereits vorhandenen Antworten scheinen sich nur mit den * .java-Dateien selbst zu befassen und nicht mit der einfachen Verwendung von Bibliotheksdateien, die möglicherweise für den Build benötigt werden.
Eine nette einzeilige Situation, die rekursiv alle * .java-Dateien abruft sowie * .jar-Dateien enthält, die zum Erstellen erforderlich sind, ist:
Hier ist die bin-Datei das Ziel von Klassendateien, lib (und möglicherweise das aktuelle Arbeitsverzeichnis) enthalten die Bibliotheksdateien und alle Java-Dateien im src-Verzeichnis und darunter werden kompiliert.
quelle
Sie müssten so etwas wie Ant verwenden, um dies hierarchisch zu tun:
http://ant.apache.org/manual/Tasks/javac.html
Sie müssen ein Build-Skript mit einem Ziel namens compile erstellen, das Folgendes enthält:
Dann können Sie alle Dateien kompilieren, indem Sie Folgendes ausführen:
Alternativ importieren Sie Ihr Projekt in Eclipse und es kompiliert automatisch alle Quelldateien für dieses Projekt.
quelle
Es gibt eine Möglichkeit, dies ohne Verwendung eines Pipe-Zeichens zu tun. Dies ist praktisch, wenn Sie einen Prozess aus einer anderen Programmiersprache abspalten, um dies zu tun:
Wenn Sie in Bash sind und / oder nichts dagegen haben, eine Pfeife zu verwenden, können Sie Folgendes tun:
quelle
Windows-Lösung: Angenommen, alle Dateien befinden sich im Unterverzeichnis 'src' und Sie möchten sie zu 'bin' kompilieren.
Wenn src eine .java-Datei direkt darunter enthält, ist dies schneller
quelle