Envoyé par
tchize_
sauf que dans le cas qui nous concerne, le module en question ne donnera pas le même résultat à la recompilation puisque tu a changé une interface et qu'il n'implémente pas la nouvelle méthode! (d'ou l'exception).
Ok, il ne donnera pas le même résultat dans le sens où il ne donnera rien du tout (si ce n'est une erreur). Par contre, il ne produira jamais des .class différents.
Soyons plus précis :
Processus de production :
Pour chaque module
m de la liste des modules du projet (classée de manière à ce que
m1 -> m2 => index(m2) < index(m1)) :
a) Si m a changé de lui-même :
Recompiler m et le republier.
b) Sinon, si une dépendance (directe ou indirecte) de
m a changé :
Ne pas recompiler m mais simplement vérifier la cohérence de son bytecode vis à vis de ses dépendances.
c) Sinon :
Ne rien faire.
Dans le cas b), de deux choses l'une pour le module m :
- ou bien il serait recompilé avec succès en produisant strictement la même chose à publier (inutile donc de le recompiler) ;
- ou bien il y aurait des erreurs de compilation.
L'idée d'examiner le bytecode est juste de savoir directement s'il existe des erreurs statiques (telles que l'exemple de la méthode g ajoutée) dans les classes qu'on possède déjà de la précédente production, sans passer par la compilation complète (analyse lexicale, syntaxique, etc.) dont on se fiche (je sais que javac est très rapide mais la question n'est pas là).
Partager