[XDoclet] Impossible de générer des classes
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
Code:
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 src une classe Toto toute simple, un attribut, des accesseurs.
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à :
Code:
1 2 3
| [xdoclet] (XDocletMain.start 47 ) Running <template/>
(...)
[xdoclet] (TemplateSubTask.startProcessPerClass 650 ) Per class. |
Le code de XDoclet donne à penser que la liste des classes sources est vide.
Code:
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.