jaxb2-maven-plugin : plusieurs exécutions successives de jaxb2:xjc
Dans ce ticket, je vais expliquer comment bien configurer le plugin jaxb2-maven-plugin dans le cas où l’on souhaite transformer des fichiers XSD en classes java vers des packages différents. Il faut savoir qu’avec ce plugin il n’est pas possible de définir plusieurs packages de destination dans une même exécution.
Dans l’exemple choisi, je génère deux classes Java à partir de deux fichier XSD vers deux packages différents :
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> <executions> <execution> <id>id1</id> <phase>generate-sources</phase> <goals> <goal>xjc</goal> </goals> <configuration> <clearOutputDir>false</clearOutputDir> <staleFile>${project.build.directory}/generated-sources/jaxb/.staleFlag-id1</staleFile> <schemaDirectory>${basedir}/src/main/resources/id1</schemaDirectory> <packageName>id1</packageName> <!-- The name of your generated source package --> </configuration> </execution> <execution> <id>id2</id> <phase>generate-sources</phase> <goals> <goal>xjc</goal> </goals> <configuration> <clearOutputDir>false</clearOutputDir> <staleFile>${project.build.directory}/generated-sources/jaxb/.staleFlag-id2</staleFile> <schemaDirectory>${basedir}/src/main/resources/id2</schemaDirectory> <packageName>id2</packageName> <!-- The name of your generated source package --> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.8.1</version> </dependency> </dependencies> </plugin>
A noter que pour chaque exécution :
- Il est nécessaire d’utiliser un identifiant unique. Sinon maven n’arrivera pas à exécuter le plugin.
- Il faut impérativement utiliser l’option staleFile pour associer un fichier différent à chaque exécution (ce fichier sert au plugin pour savoir si les classes Java sont déjà générées). Sans cela, la seconde exécution ne génèrera pas de classe Java.
- Il faut indiquer au plugin de ne pas nettoyer le répertoire de génération avant l’exécution (option clearOutputDir à false) car c’est son comportement par défaut. Sans cela, la seconde exécution supprimera les classes générées pas la première.
Voici l’adresse de l’exemple associé : https://subversion.assembla.com/svn/everythingiswrong/tutorial-jaxb2-maven-plugin/.