2009-12-03 4 views
2

Existe-t-il une possibilité de mettre en cache la compilation java comme le fait ccache pour la compilation C ou C++?Cache java compilation

J'ai beaucoup de code à compiler, et je compile le même code plusieurs fois, donc cela a pris beaucoup de temps. J'ai donc pensé à le mettre en cache pour accélérer. Mais le problème principal est que, le code source entier a beaucoup de fichiers dans de nombreux répertoires, et il y a tellement de fichiers java. La compilation est faite par les scripts ant qui sont invoqués par le script make. Il doit être compilé par le JDK du Soleil. Et de plus ... entre les compilations je dois nettoyer tous les fichiers de classe * créés.

Je ne peux donc utiliser aucune des fonctionnalités d'IDE.

Répondre

8

Eclipse ne compilation incrémentale des classes (je suppose que d'autres le font aussi). Seule la partie de votre classe qui change sera compilée. Tout le reste ne sera pas changé. Cela fonctionne raisonnablement bien dans les projets du monde réel.

outils de construction comme Maven et Ant peuvent être configurés pour compiler uniquement fichiers java modifiés. Ceux-ci ne suivent pas les dépendances dans certains scénarios dont ils manquent les compilations nécessaires. (Par exemple changer la signature dans une super classe.)

+0

"Seule la partie de votre classe qui change sera compilée." Cool, je ne le savais pas; Je pense que cela a juste recompilé des classes entières. Mais je suppose que cela est nécessaire pour des fonctionnalités telles que permettre d'exécuter du code à partir de classes avec des erreurs de compilation (ce que le débogueur Eclipse permet parfois). – sleske

+0

Un compilateur par lots pourrait faire la même chose. Je suppose qu'il n'est pas très utile d'imprimer les erreurs du compilateur comme des avertissements et de jeter des exceptions à l'exécution dans ce scénario. –

+0

Autre utilisation du compilateur Eclipse - Tomcat l'utilise comme compilateur pour (jsps). –

2

Le meilleur moyen serait de factoriser les classes partagées dans des jars utilitaires que vous incluez simplement dans votre chemin de classe de compilation, sauf s'il y a vraiment une raison spécifique (et bonne) cela vous empêche de le faire (la duplication de code est mauvaise et vous conduira à la perte :)).

2

Il n'y a pas de fonctionnalité de mise en cache dans le JDK de Sun lui-même, autant que je sache.

Cependant, la plupart des IDE Java vont mettre en cache la compilation, donc si vous avez besoin de "compilation à la demande", cela devrait faire l'affaire. Eclipse et Netbeans ont certainement ceci. Ils ne recompileront que les classes modifiées (et leurs dépendances, qu'ils découvriront automatiquement). C'est assez rapide pour la plupart des changements.

+0

Si vous utilisez ant comme un système de construction (que Eclipse et Netbeans, entre autres, font sous le capot), vous bénéficierez d'une compilation "à la demande". Un fichier .class ne sera généré que si le fichier .java correspondant est plus récent. – Romain

+0

@Romain: En fait, Eclipse va au-delà de ce que fait la fourmi. Voir la réponse de Thomas Jung. Et même si Eclipse peut aussi exécuter des scripts ant, il a son propre compilateur interne qui est normalement utilisé pour compiler des projets, donc dire "Eclipse utilise une fourmi sous le capot" est un peu trompeur. – sleske