Diferencia de los complementos Maven JAXB

126

He determinado que existen dos complementos JAXB para Maven 2, con algunas configuraciones diferentes.

Uno es de Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/ , el otro de Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

¿Cuál de estos dos complementos se puede recomendar?


Gracias Matt En mi pequeño proyecto de investigación, descubrí que hay otro plugin proveniente de los sunners:

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

y ese:

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

y sigue siendo el de Codehouse.

cuh
fuente

Respuestas:

104

Resumamos Tenemos:

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

Basado en los comentarios de este hilo , siempre he usado el complemento maven-jaxb2 (es decir, el complemento # 1):

Con respecto al org.jvnet.jaxb2.maven2: maven-jaxb2-plugin versus com.sun.tools.xjc.maven2: maven-jaxb-plugin, desde mi punto de vista, definitivamente es el primero ( http: // maven-jaxb2 -plugin.java.net/ ).

Este complemento tiene muchas más funciones que com.sun.tools.xjc.maven2: maven-jaxb-plugin, el desarrollo está activo. Finalmente, soy uno de los autores :) y diría que nos mantenemos en contacto con los desarrolladores y usuarios de JAXB y reaccionamos a las últimas características / solicitudes.

Y de hecho, el complemento # 2 no es muy activo (¿muerto?). Y debido a que siempre he estado contento con el n. ° 1, nunca he usado el complemento n. ° 3, así que realmente no puedo decir nada al respecto. Por si acaso, aquí hay una configuración de trabajo para el complemento # 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
fuente
1
Thx para la configuración. Al final uso el plugin codehouse, que me da las mismas capacidades para mis necesidades. Solo la sintaxis difiere por lo que he visto.
Cuh
¿Qué pasa con ws.apache.org/jaxme/mp que se menciona directamente en el sitio de Maven?
rcl
1
@rcl: No puedo decir mucho al respecto, pero como no se ha actualizado durante más de 4 años, no estoy seguro de si lo usaría. Estoy contento con el complemento maven-jaxb2 .
Pascal Thivent
1
En cuanto al número 1, el sitio que aloja la documentación parece estar caído hoy. confluence.highsource.org/display/MJIIP/User+Guide ¿Este proyecto está activo?
rds
2
@Gregor maven-jaxb2-pluginahora está alojado en GitHub . La documentación está en la wiki .
lexicore 03 de
44

Recientemente he probado los tres complementos mencionados anteriormente (incluidos aquí también):

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

Terminé usando una cuarta opción: el complemento CXF XJC Maven http://cxf.apache.org/cxf-xjc-plugin.html

Si me falta algo que me gustaría saber, pero la configuración parecía más sencilla para lo que estaba tratando de hacer y más fácilmente me permitió tratar con la generación de clases duplicadas dentro del mismo espacio de nombres, similar a esta pregunta: ¿Hay un ¿Cómo manejar definiciones de elementos duplicados en múltiples archivos .xsd en JAXB? .

Ahora tengo control granular sobre cada XSD entrante y el paquete de Java correspondiente; Aquí hay una configuración de muestra cercana a la que estoy usando.

 <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.
fuente
1
Excelente sugerencia Acabo de probar esto y funcionó de maravilla, gracias.
SGB
¿Alguien sabe si hay un conector Eclipse m2e para esto? Busqué en Google y no encontré uno. Espero haberlo perdido porque me gusta esta opción.
user944849
cxf-xjc-plugin tiene un conector Eclipse a partir de 2017. Pero no veo el problema de generar el código manualmente ejecutando maven y agregando el directorio fuente. De hecho, mi experiencia es que los proyectos con clases generadas (JAXB, XMLBeans) es mejor dejarlos cerrados y depender de ellos en forma binaria (jar). Entonces IDE funciona más rápido y no hay problemas de classpath (especialmente con XMLBeans).
Vytenis Bivainis
Parece que CXF XJC Maven Plugin solo admite la generación de fuentes Java a partir de esquemas, y no es capaz de generar esquemas a partir de anotaciones Jaxb.
alebu
19

Soy el autor de maven-jaxb2-plugin .

El plugin maven-jaxb2-plugin actualmente usa JAXB 2.1. En las próximas versiones también proporcionaremos las versiones JAXB 2.0 y JAXB 2.2.

En cuanto a la discusión sobre "qué complemento es mejor", verifique las características , decídase usted mismo. Avíseme si pierde alguna funcionalidad.

lexicore
fuente
¿Es posible generar esquemas a partir de clases usando el complemento maven-jaxb2? ¿O el complemento solo admite xsd-> Java?
Jörg
Actualmente es solo xsd-> java.
lexicore
¿El nombre 'maven-jaxb2-plugin' no viola las convenciones de nomenclatura del complemento Maven o es un complemento oficial de maven? No me importa el nombre, pero como nunca se actualizó, pensé que el complemento ya no se mantendría.
Viernes
El complemento es bastante antiguo, fue creado antes de que se convirtiera en una convención establecida. Y jaxb2-maven-plugin ya fue tomado en ese entonces. Creo que es importante evitar la colisión de nombres aquí. Sin embargo, hoy en día la creación de complementos incluso impone estas convenciones de nomenclatura, por lo que probablemente tendré que migrar de todos modos.
lexicore
3
@lanoxx No, no lo es. En general, no se recomienda compilar esquemas a partir de URL. Haga copias locales de esquemas y use archivos de catálogo para reescribir enlaces.
lexicore
3
  • maven-jaxb2-plugin usa la implementación de referencia JAXB de Oracle / Sun
  • cxf y jaxb2-maven-plugin usan Apache Xerces
rds
fuente
2

En una ligera tangente: había un problema con el uso de maven-jaxb2-plugin con Eclipse Indigo que publiqué aquí . Recientemente se ha puesto a disposición una solución (extensión).

Esto no pretende estar en desacuerdo, en absoluto, con la recomendación de maven-jaxb2-plugin sobre maven2-jaxb-plugin. No lo sé, pero espero que maven2-jaxb-plugin tenga el mismo problema, probablemente sin resolver.

Ed Staub
fuente
0

Supongo que uno es para la especificación JAXB original y el codehaus es para la especificación JAXB 2.1 (y si dev.java.net se cargara en algún momento este siglo, podría decirlo con certeza).

mate b
fuente
Sí, y si fuera posible descargar el complemento org.jvnet.jaxb2.maven2 , los compararía. Dado que el repositorio de Java no proporciona el complemento, está fuera del juego, aunque la sintaxis de configuración parecía un poco más conveniente.
cuh