Différence des plugins Maven JAXB

126

J'ai déterminé que deux plugins JAXB pour Maven 2 existent, avec des configurations différentes.

L'un vient 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 peut être recommandé?


Merci Matt. Sur mon petit projet de recherche, j'ai trouvé qu'il y avait un tout autre plugin venant des sunners:

<groupId>com.sun.tools.xjc.maven2</groupId>  
<artifactId>maven-jaxb-plugin</artifactId>  

et celui-là:

<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>

et toujours celui de Codehouse.

cuh
la source

Réponses:

104

Résumons. Nous avons:

  1. le plugin maven-jaxb2 ( https://github.com/highsource/maven-jaxb2-plugin )
  2. le plugin maven-jaxb ( https://jaxb.dev.java.net/jaxb-maven2-plugin/ )
  3. le plugin jaxb2-maven ( https://github.com/mojohaus/jaxb2-maven-plugin )

Sur la base des commentaires de ce fil , j'ai toujours utilisé le plugin maven-jaxb2 (ie plugin # 1):

Concernant org.jvnet.jaxb2.maven2: maven-jaxb2-plugin versus com.sun.tools.xjc.maven2: maven-jaxb-plugin, de mon point de vue c'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-jaxb-plugin, le développement est actif. Enfin, je suis l'un des auteurs :) et je dirais que nous restons en contact avec les développeurs et les utilisateurs de JAXB et réagissons aux dernières fonctionnalités / demandes.

Et en effet, le plugin n ° 2 n'est pas très actif (mort?). Et parce que j'ai toujours été satisfait du # 1, je n'ai jamais utilisé le plugin # 3 donc je ne peux vraiment rien dire à ce sujet. Au cas où, voici une configuration de travail pour le plugin n ° 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>
Pascal Thivent
la source
1
Thx pour la config. Au final, j'utilise le plugin codehouse, qui me donne les mêmes capacités pour mes besoins. Seule la syntaxe diffère pour autant que j'ai vu.
cuh
Qu'en est-il de ws.apache.org/jaxme/mp qui est mentionné directement sur le site de Maven?
rcl
1
@rcl: Je ne peux pas en dire beaucoup à ce sujet mais comme il n'a pas été mis à jour depuis plus de 4 ans, je ne suis pas sûr de l'utiliser. Je suis juste content du plugin maven-jaxb2 .
Pascal Thivent
1
Quant au n ° 1, le site hébergeant la documentation semble être en panne aujourd'hui. confluence.highsource.org/display/MJIIP/User+Guide Ce projet est-il actif?
rds
2
@Gregor maven-jaxb2-pluginest maintenant hébergé sur GitHub . La documentation est dans le wiki .
lexicore
44

J'ai récemment essayé les trois plug-ins mentionnés ci-dessus (inclus ici également):

  1. le plugin maven-jaxb2 ( http://maven-jaxb2-plugin.java.net/ )
  2. le plugin maven-jaxb ( https://jaxb.dev.java.net/jaxb-maven2-plugin/)
  3. le plugin jaxb2-maven ( http://mojo.codehaus.org/jaxb2-maven-plugin/ )

J'ai fini par utiliser une quatrième option: le plugin CXF XJC Maven http://cxf.apache.org/cxf-xjc-plugin.html

S'il me manque quelque chose que j'aimerais savoir, mais que la configuration me paraissait plus simple pour ce que j'essayais de faire et me permettait plus facilement de gérer la génération de classes en double dans le même espace de noms - similaire à cette question: y a-t-il un moyen de gérer 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 le package Java correspondant; voici un exemple de configuration proche de celle que j'utilise.

 <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>
bn.
la source
1
Excellente suggestion. J'ai juste essayé et cela a fonctionné comme un charme - merci.
SGB
Est-ce que quelqu'un sait s'il existe un connecteur Eclipse m2e pour cela? J'ai fait quelques recherches sur Google et je n'en ai pas trouvé. En espérant que je viens de le manquer car j'aime cette option.
user944849
cxf-xjc-plugin a un connecteur Eclipse à partir de 2017. Mais je ne vois pas le problème de générer le code manuellement en exécutant maven et en ajoutant le répertoire source. En fait, mon expérience est que les projets avec des classes générées (JAXB, XMLBeans) sont mieux laissés fermés et dépendants d'une forme binaire (jar). Ensuite, l'EDI fonctionne plus rapidement et il n'y a pas de problèmes de chemin de classe (en particulier avec XMLBeans).
Vytenis Bivainis le
Il semble que CXF XJC Maven Plugin ne prend en charge que la génération de sources Java à partir d'un schéma et n'est pas capable de générer un schéma à partir d'annotations Jaxb.
alebu le
19

Je suis l'auteur de maven-jaxb2-plugin .

Le plugin maven-jaxb2 utilise actuellement JAXB 2.1. Dans les prochaines versions, nous fournirons également les versions JAXB 2.0 et JAXB 2.2.

Quant à la discussion "quel plugin est le meilleur", vérifiez les fonctionnalités , décidez vous-même. Faites-moi savoir si vous manquez une fonctionnalité.

Lexicore
la source
Est-il possible de générer des schémas à partir de classes en utilisant le plugin maven-jaxb2? Ou le plugin ne prend-il en charge que xsd-> Java?
Jörg
Actuellement, il s'agit uniquement de xsd-> java.
lexicore
Le nom 'maven-jaxb2-plugin' ne viole-t-il pas les conventions de dénomination du plugin Maven ou s'agit-il d'un plugin officiel maven? Le nom ne me dérange pas mais comme il n'a jamais été mis à jour, je pensais que le plugin ne serait plus maintenu.
FrVaBe
Le plugin est assez ancien, il a été créé avant que cela ne devienne une convention établie. Et jaxb2-maven-plugin était déjà repris à l'époque. Je pense qu'il est important d'éviter la collision de noms ici. Cependant, de nos jours, la construction de plugins applique même ces conventions de nommage, donc je devrai probablement migrer de toute façon.
lexicore
3
@lanoxx Non, ce n'est pas le cas. Il n'est généralement pas recommandé de compiler des schémas à partir d'URL. Faites des copies locales des schémas et utilisez des fichiers catalogue pour réécrire les liens.
lexicore
3
  • maven-jaxb2-plugin utilise l'implémentation de référence JAXB par Oracle / Sun
  • cxf et jaxb2-maven-plugin utilisent Apache Xerces
rds
la source
2

Sur une légère tangente: il y avait un problème avec l'utilisation de maven-jaxb2-plugin avec Eclipse Indigo que j'ai posté ici . Un correctif (extension) est récemment devenu disponible.

Cela ne veut pas du tout être en désaccord avec la recommandation de maven-jaxb2-plugin sur maven2-jaxb-plugin. Je ne sais pas, mais je pense que maven2-jaxb-plugin a le même problème, probablement non résolu.

Ed Staub
la source
0

Je suppose que l'une concerne la spécification JAXB originale et la spécification codehaus est la spécification JAXB 2.1 (et si le dev.java.net se chargerait quelque temps ce siècle, je serais en mesure de le dire à coup sûr).

mat b
la source
Ouais, et s'il était possible de télécharger le plugin org.jvnet.jaxb2.maven2, je les comparerais. Comme le dépôt de java ne fournit pas le plugin, il est hors du jeu, bien que la syntaxe de configuration semble un peu plus pratique.
cuh