Bonjour,
J'essaie de reproduire exactement la même logique (qui fonctionne) d'un projet à un autre. Il s'agit de générer des classes Java à partir d'autres classes, via XDoclet.
J'ai dans mon arborescence un script ANT, simplifié au maximum, qui lance XDcolet, 3 sous-répertoires src, target, tpl.
build-mappers.xml
J'ai dans src une classe Toto toute simple, un attribut, des accesseurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <project default="generate"> <property file="../paths.properties" /> <path id="xdoclet.path"> <fileset dir="${path.project.home}/lib/xdoclet-1.2.3" includes="*.jar" /> </path> <target name="generate"> <taskdef name="xdoclet" classname="xdoclet.DocletTask" classpathref="xdoclet.path" /> <xdoclet destdir="./target"> <fileset dir="./src"> <include name="**/*.java" /> </fileset> <template templateFile="./tpl/test.xdt" destinationfile="{0}Mapper.java"> </template> </xdoclet> </target> </project>
J'ai dans tpl un fichier dont le contenu est : TEST <XDtClass:className/>
J'ai augmenté le niveau de log du jar XDoclet.
Tel quel, le build s'arrête là :
Le code de XDoclet donne à penser que la liste des classes sources est vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [xdoclet] (XDocletMain.start 47 ) Running <template/> (...) [xdoclet] (TemplateSubTask.startProcessPerClass 650 ) Per class.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 protected void startProcessPerClass() throws XDocletException { Log log = LogUtil.getLog(TemplateSubTask.class, "startProcessPerClass"); if (log.isDebugEnabled()) { log.debug("Per class."); } Collection classes; XJavaDoc xjavadoc = getXJavaDoc(); xjavadoc.setUseNodeParser(false); if (processInnerClasses()) { classes = xjavadoc.getSourceClasses(); } else { classes = xjavadoc.getSourceClasses(new XJavaDoc.NoInnerClassesPredicate()); } for (Iterator i = classes.iterator(); i.hasNext();) { XClass clazz = (XClass) i.next(); setCurrentClass(clazz); if (matchesGenerationRules(clazz)) { if (log.isDebugEnabled()) { log.debug("Working on " + clazz); } generateForClass(clazz); } } }
Si j'enlève le {0} dans "{0}Mapper.java", le log indique (normal) "Not per class" et l'itération sur les sources se fait, mais j'obtiens une NPE lorsque le programme tente de lire <XDtClass:className/>.
Si je ne laisse que TEST dans le template, j'obtiens bien un seul (normal) fichier tout bête avec TEST dedans, mais bon...
Je vois pas la différence avec le projet d'où j'ai importé le build, je pige vraiment pas...
Si quelqu'un connait bien XDoclet et a une piste, merci.
Partager