Gelegentlich kann eine kleine Änderung an einer Java-Quelldatei wie einige zusätzliche explizite Umwandlungen, die dem Compiler helfen, die Kompilierzeit von 4 Minuten auf 3 Sekunden für eine einzelne Java-Datei verbessern (besonders in Java 8).
Das Problem ist: Wie finden Sie in einem großen Java-Projekt, welche speziellen .java-Dateien langsam kompilieren?
Gibt es eine Möglichkeit, Ant zu bekommen, wie lange es dauert, um jede einzelne .java-Datei zu kompilieren?
Ich denke, dass dies möglich sein könnte. Hier ist, was ich gefunden habe:
Wenn Sie Java 8 verwenden, können Sie ein Plugin mit dem Compiler, um während der Kompilierung einige zusätzliche Funktionen hinzuzufügen. Die Dokumentation sagt Folgendes über Plugins:
Es wird erwartet, dass ein typisches Plug-in einfach einen TaskListener registriert, um über Ereignisse während der Ausführung der Kompilierung informiert zu werden, und dass der Rest der Arbeit vom Task-Listener ausgeführt wird.
Sie können also ein Plug-in einrichten, um einen TaskListener zu verwenden, und der Task-Listener protokolliert Zeitstempel, wenn die Klasse generiert wird.
%Vor%Dokumentation für TaskListener . Ein Aufgabenlistener wird an ein TaskEvent <übergeben / a>, die eine Kind . In deinem Fall klingt es so, als ob du an der Generation interessiert bist.
%Vor%Dies ist ein einfaches Beispiel, aber es sollte von hier aus einfach sein, so etwas wie eine Protokolldatei einzurichten, um die gesammelten Informationen zu speichern. Wie Sie in der init-Funktion des Plugins sehen können, können Argumente über die Befehlszeile an das Plugin übergeben werden.
Das Plugin wird konfiguriert, indem Sie es mit dem -Xplugin Compiler-Argument angeben. Ich bin mir nicht sicher warum, aber es scheint keine Dokumentation zu zu geben Seite darüber, aber es kann verwendet werden, indem Sie eine Datei namens com.sun.source.util.Plugin (der FQ-Klassenname der zu implementierenden Schnittstelle) in Ihrem META-INF / services-Verzeichnis einrichten. Also:
%Vor%Und in dieser Datei listet den FQ-Klassennamen Ihrer Implementierung dieser Klasse auf. Der Inhalt der Datei wäre also:
%Vor%In Ihrer Ant-Task müssen Sie nur ein Compiler-Flag angeben -Xplugin: Timestamp_Plugin (beachten Sie, dass dies der Name ist, der von der Funktion getName () des Plugins bereitgestellt wird). Sie müssen außerdem die kompilierten Plug-in- und Laufzeitabhängigkeiten für den Klassenpfad oder den Pfad des Annotationsprozessors angeben, falls einer angegeben ist.