Bonjour,

Je suis confronté à un problème qui peut (je pense) être résolu soit par des dev ANT soit par des dev JAVA...

Je suis entrain de développer des taches ANT pour produire de la javadoc.

Concrètement, ma tache principale permet de générer la javadoc de plusieurs projets et je souhaite ne renseigner dans le script Ant qu'un seul tag javadoc contenant les informations du look qu'auront les javadocs. Ensuite dans le code java de la tache je créé dynamiquement plusieurs javadocs ayant les informations contenues dans le script (à ce moment là les taches ont toutes les mêmes infos). Puis, je spécialise chaque tache javadoc en fonction du projet qui lui correspond : je change les chemins des fichiers sources, le classpath, etc.

Mon problème : pour créer les taches javadoc dynamiquement j'utilise la méthode clone(), le problème est que les attributs des taches javadocs clonées pointent vers la même référence. Ainsi, si je change un attribut, il est aussi changé dans toutes les javadocs.

Prenons le cas qui m'intéresse : l'attribut sourceFiles (de la classe Javadoc). C'est un attribut privé, il n'y a pas de getter correspondant et son setter n'est pas classique. Le setter ne modifie pas l'attribut, il ajoute les informations renseignées (au lieu de remplacer les fichiers sources, il ajoute à sourceFiles ceux spécifiés en paramètres).
Vous l'aurez donc compris, après avoir fait setSourceFiles(...) sur chaque tache javadoc (les fichiers sources sont différents pour chq tache), la dernière tache va contenir dans l'attribut sourceFiles toutes les sources de tous les projets.
Si j'avais un moyen d'initialiser l'attribut sourceFiles entre chaque setSourceFiles ce serait l'idéal, mais en l'occurence il n'existe pas de méthode public le permettant.

Ma question :

- (Java) Avez-vous une idée pour que je puisse créer dynamiquement des taches Javadoc qui auraient des attributs totalement différents (n'ayant pas les même références) ? (Bien évidemment je ne peux pas modifier la source du code Javadoc.java)

- (Ant) Une idée pour faire ce que j'ai expliquer d'une autre manière ?


Merci à ceux qui auront eu le courage de lire ce message, et merci de votre aide.