web-dev-qa-db-fra.com

Différence de plugins Maven JAXB

J'ai déterminé que deux [~ # ~] jaxb [~ ​​# ~] plugins pour Maven 2 existent, 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 peut être recommandé?


Merci Matt. Lors de mon petit projet de recherche, j'ai découvert qu'il existe un autre plugin provenant 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.

122
cuh

Résumons. On a:

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

D'après les commentaires de ce fil , j'ai toujours utilisé le maven-jaxb2-plugin (c'est-à-dire le plugin n ° 1):

Concernant le plugin org.jvnet.jaxb2.maven2: maven-jaxb2 par rapport à com.Sun.tools.xjc.maven2: maven-jaxb-plugin, c’est définitivement le premier ( http://maven-jaxb2-plugin.Java.net/ ).

Ce plugin a bien 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 que nous 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é heureux avec # 1, je n'ai jamais utilisé le plugin # 3, donc je ne peux vraiment rien en dire. Juste 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>
101
Pascal Thivent

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

  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

Si je manque quelque chose que j'aimerais savoir, mais la configuration semblait plus simple pour ce que j'essayais de faire et me permettait plus facilement de traiter la génération de classes en double dans le même espace de noms - semblable à cette question: Existe-t-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 le package Java correspondant; voici un exemple de configuration proche de celui 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>
44
bn.

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.

En ce qui concerne "quel plugin est le meilleur" discussion, vérifiez les fonctionnalités , décidez-vous. Faites-moi savoir si vous manquez une fonctionnalité.

20
lexicore
  • maven-jaxb2-plugin utilise l'implémentation de référence JAXB d'Oracle/Sun
  • cxf et jaxb2-maven-plugin utilisent Apache Xerces
3
rds

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 disponible.

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

2
Ed Staub

Je suppose que celui-ci correspond à la spécification JAXB d’origine et le codehaus à la spécification JAXB 2.1 (et si le dev.Java.net se chargerait au cours de ce siècle, je serais en mesure de le dire).

0
matt b