Différence de plugins Maven JAXB
-
19-09-2019 - |
Question
J'ai déterminé que deux JAXB plugins pour Maven 2 existe, avec des configurations différentes.
L'un est de Sun: http://jaxb.dev.java.net / jaxb-maven2-plugin / , l'autre de Mojohaus: http://mojohaus.org / jaxb2-maven-plugin /
Lequel de ces deux plugins peuvent être recommandées?
Merci Matt. Sur mon petit projet de recherche, je trouve qu'il ya une autre plug-in comming des sunners:
<groupId>com.sun.tools.xjc.maven2</groupId>
<artifactId>maven-jaxb-plugin</artifactId>
et que celui-ci:
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
et encore celle de Codehouse.
La solution
Résumons. Nous avons:
- maven-plugin-jaxb2 ( https://github.com/highsource/maven-jaxb2-plugin )
- maven-plugin-JAXB ( https://jaxb.dev.java.net/jaxb-maven2-plugin/ )
- jaxb2-maven-plugin ( https://github.com/mojohaus/jaxb2-maven-plugin )
D'après les commentaires de ce fil , je l'ai toujours utilisé le maven-plugin-jaxb2 (ie plug-in # 1 ):
En ce qui concerne la org.jvnet.jaxb2.maven2: maven-plugin-jaxb2 contre com.sun.tools.xjc.maven2: maven-plugin-JAXB, de mon point de vue, il est certainement le premier ( http://maven-jaxb2-plugin.java.net/ ).
Ce plugin a beaucoup plus de fonctionnalités que com.sun.tools.xjc.maven2: maven-plugin-JAXB, le développement est actif. Finalement, Je suis l'un des auteurs :) et je dirais nous restons en contact avec les développeurs JAXB et les utilisateurs et réagissent aux actus caractéristiques / demandes.
Et en effet, le plug-in # 2 n'est pas très actif (mort?). Et parce que je l'ai toujours été heureux avec # 1, je ne l'ai jamais utilisé le plugin # 3 ne peut donc pas vraiment dire quoi que ce soit à ce sujet. Juste au cas où, voici une configuration de travail pour le plugin # 1:
<project>
...
<build>
<plugins>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Autres conseils
J'ai récemment essayé les trois plug-ins mentionnés ci-dessus (inclus ici):
- maven-plugin-jaxb2 ( http://maven-jaxb2-plugin.java.net/ )
- maven-plugin-JAXB ( https://jaxb.dev.java. net / JAXB-maven2-plugin /)
- le jaxb2-maven-plugin ( http://mojo.codehaus.org/jaxb2- maven-plugin / )
Je fini par utiliser une quatrième option: Le CXF XJC Maven Plugin y at-il un moyen de traiter les définitions d'éléments en double dans plusieurs fichiers .xsd dans JAXB .
J'ai maintenant un contrôle granulaire sur chaque XSD entrant et package java correspondant; voici un exemple de configuration proche de celle que je me sers.
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-xjc-plugin</artifactId>
<version>2.3.0</version>
<configuration>
<extensions>
<extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.3.0</extension>
</extensions>
</configuration>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>xsdtojava</goal>
</goals>
<configuration>
<sourceRoot>${basedir}/target/generated-sources/src/main/java</sourceRoot>
<xsdOptions>
<xsdOption>
<xsd>src/main/resources/schema/commands.xsd</xsd> <!--shares a common.xsd file causing the conflicts-->
<packagename>com.foo.bar.commands</packagename>
</xsdOption>
<xsdOption>
<xsd>src/main/resources/schema/responses.xsd</xsd>
<packagename>com.foo.bar.responses</packagename>
</xsdOption>
</xsdOptions>
</configuration>
</execution>
</executions>
</plugin>
Je suis l'auteur de maven-plugin-jaxb2 .
Le maven-plugin-jaxb2 utilise actuellement JAXB 2.1. Dans les prochaines versions, nous vous fournirons également des versions 2.0 et JAXB JAXB 2.2.
En ce qui concerne « plug-in qui est mieux » discussion, vérifier les caractéristiques , décidez vous-même . Faites-moi savoir si vous manquez certaines fonctionnalités.
- maven-plugin-jaxb2 utilise l'implémentation de référence JAXB par Oracle / Sun
- CxF et jaxb2-maven-plugin utilisent Apache Xerces
Sur une légère tangente: il y avait un problème avec l'utilisation de Maven-jaxb2-plugin avec Eclipse Indigo que je posté ici . Un correctif (extension) est récemment devenu disponible.
Ce ne vise pas à être en désaccord, tout, avec la recommandation de maven-plugin-jaxb2 sur maven2-JAXB-plugin. Je ne sais pas, mais j'attendre à ce que maven2-JAXB-plugin a le même problème, probablement pas résolu.
Je suppose que l'on est pour la spécification JAXB originale et Codehaus on est pour la spécification JAXB 2.1 (et si le dev.java.net chargerait quelque temps de ce siècle, je serais capable de dire à coup sûr) .