Compile performance

tniehues

Grünschnabel
Hi Leutz,

habe folgendes Problem,

Wenn ich Sourcen aus einem großen Projekt (ca. 1500 Dateien) mit einem Script kompiliere dauert das ca. ne halbe Stunde. In Eclipse dauert das ganze aber nur ca. 5 Minuten. Also stellt sich da die Frage warum das so lange dauert.

Detailinfos:
Die Sourcen werden von einem Script kompiliert, welches für jede Java - Datei den Kompiler "javac" (aus dem JDK 6_3) aufruft.

Nach einer Minute sind schon über 1000 Sourcen kompiliert. Trotzdem dauert der gesamte Vorgang fast eine halbe Stunde.

Während des Kompilevorgangs habe ich mal nach den neusten Class- Files gesucht (jünger als eine Minute). Dabei ist mir aufgefallen, dass sehr viele Dateien in jedes mal in dem Suchergebnis enthalten waren (weil sich der Timestamp geändert hat). Wieso ändert sich der Timestamp werden die Dateien teilweise zig-fach kompiliert?
 
Hallo,

ich vermute mal, dass Eclipse nur die Dateien neu kompiliert, die seit dem letzten Kompiliervorgang geändert wurden. Wenn du das ganze automatisiert machen möchtest, würde ich dir den Einsatz von Ant oder make empfehlen.

Grüße,
Matthias
 
Dass Eclipse normalerweise nur die benötigten Sourcen kompiliert ist klar und auch sinnvoll. Aber wenn ich clean Project mache muss ja alles kompiliert werden.

Ant und make sind schön und gut aber mir ist in erster Linie wichtig, dass es schneller wird. Ich glaub kaum dass der Vorgang schneller wird wenn ich Ant einsetzte, aber ich kanns ja mal probieren. Meld mich dann wenn ich die Ergebnisse habe.
 
Bist du sicher dass das Skript korrekt ist? Ich hab schon Projekte gesehen, wo durch Copy & Paste das Projekt doppelt kompiliert wurde ;). Generell sollte ein Eclipse clean nicht länger dauern als ein compile mit ant oder maven. Das Skript schon mal gedebugt?

Ich find die 5 Minuten für 1500 Dateien allerdings auch recht viel. Auf was für einem Maschinchen kompilierst denn?

REINHAUN!
 
Da das Kompilieren Teil eines Programmes ist, und alle Java-Sourcen (mithilfe der Eclipse classdatei) kompiliert werden müssen ist Ant an der Stelle nicht ganz so geschickt.

Da ich aber nicht immer alle Sourcen kompilieren muss, werden nur noch die neuen, und die welche von dern neuen Sourcen abhängig sind kompiliert. Alles was sich nicht ändert bleibt in einem Zwischenspeicher.
 
Man muss Ant ja nicht zwangsweise mit einem Buildscript nutzen. Du kannst auch die Compiler-Task aus dem Jar direkt nutzen.
 
Zurück