2017-08-18 1 views
0

J'utilise JAXB-2 Maven Plugin pour générer des classes java à partir de certains fichiers xsd. Mes configurations sont les suivantes. J'ai trois fichiers de schéma sans espace de noms cible A inclus par B inclus par C et puis j'ai deux autres schémas D et E avec un espace de noms fourni, tous les deux comprenant C. Est-il possible d'utiliser des liaisons ou différentes exécutions (avec épisodes) avoir chaque schéma produisant des classes dans des paquets différents? Quelque chose comme:Plugin Maven JAXB-2, inclusion de schéma et liaisons

A schema (no namespace) -> com.packageA 
B schema (no namespace) -> com.packageB 
C schema (no namespace) -> com.packageC 
D schema (namespace X) -> com.packageD 
E schema (namespace X) -> com.packageE 

bien sûr sans duplication de classes? Ou le mieux que je peux avoir est d'avoir deux paquets, un pour les classes appartenant aux fichiers XSD avec l'espace de noms vide et un pour les deux fichiers XSD avec l'espace de noms X? Pourriez-vous s'il vous plaît fournir un exemple de fichier pom.xml pour y parvenir? Merci Et comment pouvez-

Répondre

0

Avertissement: Je suis l'auteur de maven-jaxb2-plugin si cette réponse est de ce plugin.

Ceci est appelé "compilation de schéma séparé". Cela peut être réalisé en utilisant des épisodes, voir le explanation dans les documents maven-jaxb2-plugin.

En bref:

  • Créer un projet Maven par schéma logique. J'ai normalement un projet par espace de noms distinct.
  • Si le schéma B utilise le schéma A, inclure l'artefact du schéma A en tant que dépendance de B.
  • maven-jaxb2-plugin utilisera les dépendances comme des épisodes par défaut.
  • Dans certains cas, certaines classes de reprise sont toujours générées pour les épisodes inclus. Ils ne devraient pas l'être, je crois que c'est un bug dans XJC. Dans ces cas, ajoutez une tâche de nettoyage.
  • Soyez prêt à affronter un certain nombre de problèmes étranges car XJC est un outil difficile.

Voici un project qui compile un énorme ensemble de schémas de cette façon. Le résultat est une centaine d'artefacts dont les dépendances ressemblent étroitement aux dépendances des schémas.

Un problème que je vois est que vous avez les schémas A, B et C ayant le même espace de noms (vide), correspondant à différents paquets. Cela peut ne pas fonctionner correctement avec JAXB (voir aussi "espaces de noms caméléon").

+0

Merci beaucoup @lexicore, il n'y a aucun moyen de faire ce que vous avez expliqué sans avoir beaucoup d'artefacts différents? – filmac

+0

Vous pourriez avoir deux paquets - un pour l'espace de noms vide, un pour l'espace de noms X. – lexicore