kompiliert nur einen Teil des Quellbaums mit ant

8

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?

zu erreichen

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

%Vor%

, auch wenn die Abhängigkeiten das Kompilieren (viel) mehr als nur einer Quelldatei bewirken.

    
Davide 14.10.2008, 23:14
quelle

4 Antworten

12

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.

    
Marcus Downing 15.10.2008, 02:39
quelle
2

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:

%Vor%     
Tor P 12.07.2015 12:54
quelle
0

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.

    
Draemon 15.10.2008 01:51
quelle
0

Geben Sie nur die durch Kommas getrennte Liste von Dateien an, die Sie erstellen möchten. Sagen wir Beispiel

%Vor%

Es wird funktionieren.

    
Ankit 23.06.2013 13:59
quelle

Tags und Links