Differenza dei plug-in MAX JAXB


126

Ho determinato l' esistenza di due plugin JAXB per Maven 2, con alcune configurazioni diverse.

Uno è di Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/ , l'altro di Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

Quale di questi due plugin può essere raccomandato?


Grazie Matt. Nel mio piccolo progetto di ricerca, ho scoperto che esiste un altro plug-in proveniente dai sunners:

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

e quello:

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

e ancora quello di Codehouse.

Risposte:


104

Riassumiamo. Abbiamo:

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

Sulla base dei commenti di questo thread , ho sempre usato il plugin maven-jaxb2 (ovvero il plugin # 1):

Per quanto riguarda il org.jvnet.jaxb2.maven2: maven-jaxb2-plugin contro com.sun.tools.xjc.maven2: maven-jaxb-plugin, dal mio punto di vista è sicuramente il primo ( http: // maven-jaxb2 -plugin.java.net/ ).

Questo plugin ha molte più funzioni di com.sun.tools.xjc.maven2: maven-jaxb-plugin, lo sviluppo è attivo. Infine, sono uno degli autori :) e direi che ci teniamo in contatto con gli sviluppatori e gli utenti JAXB e reagiamo alle caratteristiche / richieste più latenti.

E infatti, il plugin # 2 non è molto attivo (morto?). E poiché sono sempre stato contento del n. 1, non ho mai usato il plugin n. 3, quindi non posso davvero dire nulla al riguardo. Per ogni evenienza, ecco una configurazione funzionante per il 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>

1
Grazie per la configurazione. Alla fine uso il plug-in codehouse, che mi offre le stesse funzionalità per le mie esigenze. Solo la sintassi differisce per quanto ho visto.
Grazie,

Che dire di ws.apache.org/jaxme/mp che è menzionato direttamente sul sito di Maven?
rcl

1
@rcl: Non posso dire molto al riguardo, ma poiché non è stato aggiornato per più di 4 anni, non sono sicuro che lo userei. Sono solo contento del plugin maven-jaxb2 .
Pascal Thivent,

1
Per quanto riguarda il numero 1, il sito che ospita la documentazione sembra essere inattivo oggi. confluence.highsource.org/display/MJIIP/User+Guide Questo progetto è così attivo?
RDS

2
@Gregor maven-jaxb2-pluginè ora ospitato su GitHub . La documentazione è nel wiki .
lessico

44

Di recente ho provato i tre plug-in sopra menzionati (inclusi anche qui):

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

Ho finito per usare una quarta opzione: il plug-in Maven CXF XJC http://cxf.apache.org/cxf-xjc-plugin.html

Se mi manca qualcosa che vorrei sapere, ma la configurazione mi è sembrata più semplice per quello che stavo cercando di fare e mi ha permesso più facilmente di gestire la generazione di classi duplicate all'interno dello stesso spazio dei nomi - simile a questa domanda: esiste un modo di gestire definizioni di elementi duplicati su più file .xsd in JAXB? .

Ora ho il controllo granulare su ogni XSD in arrivo e il corrispondente pacchetto Java; ecco una configurazione di esempio vicina a quella che sto 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>

1
Suggerimento eccellente. Ho appena provato questo e ha funzionato come un incantesimo, grazie.
SGB,

Qualcuno sa se esiste un connettore Eclipse m2e per questo? Ho fatto alcuni googling e non ne ho trovato uno. Spero di averlo perso perché mi piace questa opzione.
user944849

cxf-xjc-plugin ha il connettore Eclipse dal 2017. Ma non vedo il problema di generare il codice eseguendo manualmente maven e aggiungendo la directory di origine. In effetti, la mia esperienza è che i progetti con classi generate (JAXB, XMLBeans) devono essere lasciati chiusi e dipesi in forma binaria (jar). Quindi IDE funziona più velocemente e non ci sono problemi di percorso di classe (specialmente con XMLBeans).
Vytenis Bivainis,

Sembra che il plugin CXF XJC Maven supporti solo la generazione di origini Java dallo schema e non sia in grado di generare lo schema dalle annotazioni Jaxb.
alebu

19

Sono l'autore di maven-jaxb2-plugin .

Il plugin maven-jaxb2 attualmente utilizza JAXB 2.1. Nelle prossime versioni forniremo anche le versioni JAXB 2.0 e JAXB 2.2.

Per quanto riguarda la discussione "quale plug-in è migliore", controlla le funzionalità , decidi tu stesso. Fammi sapere se ti manca qualche funzionalità.


È possibile generare schemi dalle classi usando il plugin maven-jaxb2? O il plugin supporta solo xsd-> Java?
Jörg

Attualmente è solo xsd-> java.
lessico del

Il nome "maven-jaxb2-plugin" non viola le convenzioni di denominazione del plugin Maven o è un plugin ufficiale di maven? Non mi importa il nome ma dato che non è mai stato aggiornato, ho pensato che il plugin non sarebbe più stato mantenuto.
FrBaBe

Il plugin è piuttosto vecchio, è stato accettato prima che diventasse una convenzione consolidata. E jaxb2-maven-plugin era già stato ripreso allora. Penso che sia importante evitare la collisione dei nomi qui. Tuttavia al giorno d'oggi la compilazione di plug-in applica persino queste convenzioni di denominazione, quindi probabilmente dovrò migrare comunque.
lessico

3
@lanoxx No, non lo è. In genere non è consigliabile compilare schemi da URL. Creare copie locali degli schemi e utilizzare i file di catalogo per riscrivere i collegamenti.
lessico

3
  • maven-jaxb2-plugin utilizza l'implementazione di riferimento JAXB di Oracle / Sun
  • cxf e jaxb2-maven-plugin usano Apache Xerces

2

Un po 'tangente: c'è stato un problema con l'uso del plugin maven-jaxb2 con Eclipse Indigo che ho pubblicato qui . Una correzione (estensione) è recentemente diventata disponibile.

Questo non significa affatto essere in disaccordo con la raccomandazione di maven-jaxb2-plugin rispetto a maven2-jaxb-plugin. Non lo so, ma mi aspetto che maven2-jaxb-plugin abbia lo stesso problema, probabilmente irrisolto.


0

Immagino che uno sia per la specifica JAXB originale e quello per codehaus sia per la specifica JAXB 2.1 (e se dev.java.net si caricasse un po 'di tempo in questo secolo, sarei in grado di dirlo con certezza).


Sì, e se fosse possibile scaricare il plug-in org.jvnet.jaxb2.maven2 li confronterei. Poiché il repository di java non fornisce il plug-in, è fuori gioco, sebbene la sintassi della configurazione sia sembrata un po 'più conveniente.
cuh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.