Hello,
JDOM est sensible au namespace, le xmlns="http://maven.apache.org/POM/4.0.0" que tu vois au début.
Le namespace fait partie du nom d'un élément, on ne peut donc pas juste demander l'élément "version" sans namespace, il faut demander l'élément "version" de namespace "http://maven.apache.org/POM/4.0.0"
Ça peut se faire ainsi, dans ta classe :
private static final Namespace POM_NS = Namespace.getNamespace("http://maven.apache.org/POM/4.0.0");
Et là où tu en as besoin :
rootNode.getChildren("version", POM_NS);
Avec ton fichier, ça va marcher.
... Maintenant le problème. JDOM est sensible aux namespaces, oui, conformément aux recommandations XML. Mais Maven, lui, ne l'est pas. Du coup, certains outils génèrent des POM sans namespace, ou même avec le mauvais namespace, et comme ça ne cause pas de problème, personne ne se plaint. En plus, va savoir si Maven ne définira pas une prochaine version de POM qui marche à peu près pareil mais avec un autre namespace...
Il est possible, que tu aies besoin d'ignorer les namespaces toi aussi. Dans ce cas, tu peux faire ainsi :
1 2 3 4 5 6 7 8 9
| /**
* Récupère un élément enfant de l'élément donné, en fonction de son nom.
* Ignore les namespaces, ce qui est intéressant pour les POM aux namespaces peu fiables. Le nom vérifié est le local name, pas le qualified name.
*/
private static Element getPOMChild(Element parent, String childName) {
return parent.getChildren().stream()
.filter(child -> child.getName().equals(childName))
.findFirst().get();
} |
Et ainsi :
Element version = getPOMChild(rootNode, "version");
Partager