Angenommen, ich habe meine Quellen in meinem src / tree (und möglicherweise in meinem test / tree). Angenommen, ich möchte nur das Teil dieses Baums kompilieren. Die Gründe, warum ich das tun möchte, sind vielfältig. Ich möchte zum Beispiel das kleinstmögliche jar erstellen (ohne bestimmte Klassen einzubeziehen), oder ich möchte vielleicht die schnellste Kompilierzeit für das, was ich kompiliere. Ich möchte aber unbedingt alle Abhängigkeiten zusammenstellen!
Dies kann einfach über die Befehlszeile mit:
erreicht werden %Vor%Nun, wie kannst du das mit Ameisen machen? Der javac ant Task kompiliert alles :
Das Quell- und Zielverzeichnis wird rekursiv nach Java gescannt Quelldateien zum Kompilieren.
Man kann die Parameter excludes
und includes
verwenden, aber sie sind für diesen Zweck problematisch. In der Tat scheint es, dass man explizit alle includes
(nicht automatische Abhängigkeitssuche) einrichten muss, und sogar schlimmste das ausschlüsse hat Priorität bei Einschließen :
Wenn sowohl Einschluss als auch Ausschluss sind verwendet, nur Dateien / Verzeichnisse, die passen Sie mindestens eines der Include an Muster und stimmen nicht mit any überein Ausschlussmuster werden verwendet.
Sie können also nicht
verwenden %Vor%Weil es nichts kompiliert: - (
Gibt es eine Möglichkeit, diese einfache Befehlszeile javac
mit ant?
EDITED: Danke für Ihre Antwort, Sadie, ich akzeptiere es, weil es so funktioniert, wie ich mich in dieser Frage gefragt habe. Aber ich habe ein paar Kommentare (zu lang, um im Kommentarfeld Ihrer Antwort zu sein):
1) Ich habe die Dokumentation gelesen (siehe Links oben), aber es ist unklar, dass Sie mit includes
eigentlich auch alles andere ausschließen
2) Wenn Sie nur includes
ant protokolliert etwas wie
, auch wenn die Abhängigkeiten das Kompilieren (viel) mehr als nur einer Quelldatei bewirken.
Warum schließen Sie ein und schließen ein? Wenn Sie mindestens ein Include haben, werden Dateien nur kompiliert, wenn sie explizit eingeschlossen sind. Also sollte das funktionieren:
%Vor%Oder flexibler:
%Vor%Um nur bestimmte Pakete oder Klassen in ein Jar aufzunehmen, verwenden Sie ein Dateigruppenattribut
%Vor%Auch hier können Sie mehrere Includes verwenden, um separate Pakete zu kombinieren. Experimentieren Sie mit Includes und lesen Sie die Dokumentation und Sie finden sicher die Antwort, die Sie brauchen.
Alte Frage, aber ich habe mit dem gleichen Problem gekämpft und eine elegantere Lösung gefunden. Also hier ist es, für zukünftige Referenz:
Laut den ant-Dokumenten ist das <javac>
-Element ein implizites <fileset>
und kann daher Selektoren wie <filename name="**/MyClass.java"/>
, so würde dies nur MyClass.java kompilieren:
Eigentlich prüft ant nur alles, wenn Sie zweimal hintereinander eine Kompilierung durchführen, werden Sie bemerken, dass die zweite viel schneller ist. Tatsächlich kann es leicht überredet werden, Dinge zu verpassen.
Wenn Sie nicht wollen, dass alles berücksichtigt wird, müssen Sie es in kleinere Module / Projekte / Quellbäume aufteilen, so dass Sie explizit sagen, was Sie kompilieren sollen.