Differenza di plugin Maven JAXB
-
19-09-2019 - |
Domanda
ho stabilito che due JAXB plugin per Maven 2 esistono, con alcune configurazioni differenti.
L'uno è da sole: http://jaxb.dev.java.net / JAXB-maven2-plugin / , l'altro da Mojohaus: http://mojohaus.org / jaxb2-maven-plugin /
Quale di questi due plugin può essere raccomandato?
Grazie Matt. Sul mio piccolo progetto di ricerca, ho scoperto che c'è abbastanza un altro plugin ritornassi dai sunners:
<groupId>com.sun.tools.xjc.maven2</groupId>
<artifactId>maven-jaxb-plugin</artifactId>
e che uno:
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
e ancora quello da Codehouse.
Soluzione
Riassumiamo. Abbiamo:
- Maven-jaxb2-plugin ( https://github.com/highsource/maven-jaxb2-plugin )
- Maven-JAXB-plugin ( https://jaxb.dev.java.net/jaxb-maven2-plugin/ )
- jaxb2-maven-plugin ( https://github.com/mojohaus/jaxb2-maven-plugin )
Sulla base delle osservazioni di questa discussione , ho sempre usato il Maven-jaxb2-plugin (cioè plug # 1 ):
Per quanto riguarda la 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 caratteristiche molto di più di com.sun.tools.xjc.maven2: Maven-JAXB-plugin, lo sviluppo è attivo. Finalmente, Sono uno degli autori :) e direi ci teniamo in contatto con gli sviluppatori JAXB e gli utenti e reagiscono alle latests Caratteristiche / richieste.
E in effetti, il plugin # 2 non è molto attivo (morto?). E poiché sono sempre stato felice con # 1, non ho mai usato plug # 3 quindi non posso dire nulla su di esso. Solo nel caso, qui è una configurazione di lavoro 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>
Altri suggerimenti
Recentemente ho provato le tre plug-in di cui sopra (incluso anche qui):
- l'esperto-jaxb2-plugin ( http://maven-jaxb2-plugin.java.net/ )
- l'esperto-JAXB-plugin ( https://jaxb.dev.java. / JAXB-maven2-plugin net /)
- il jaxb2-maven-plugin ( http://mojo.codehaus.org/jaxb2- maven-plugin / )
Ho finito per usare una quarta opzione: Il CXF XJC Maven Plugin http://cxf.apache.org/cxf-xjc-plugin.html
Se mi manca qualcosa Vorrei sapere, ma la configurazione sembrava più semplice per quello che stavo cercando di fare e più facilmente mi ha permesso di trattare con la generazione di classe duplicato all'interno dello stesso spazio dei nomi - simile a questa domanda: c'è un modo per trattare con definizioni degli elementi duplicati in più file .xsd in JAXB? .
Ora ho controllo granulare su ogni XSD entrata e corrispondente pacchetto java; ecco un esempio di configurazione 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>
Io sono l'autore di Maven-jaxb2-plugin .
Il Maven-jaxb2-plugin utilizza attualmente JAXB 2.1. Nelle prossime versioni ci sarà anche fornire JAXB 2.0 e JAXB 2.2 versioni.
Per quanto riguarda "il quale plug-in è meglio" discussione, verificare le caratteristiche , decidono da soli . Fatemi sapere se si perde alcune funzionalità.
- Maven-jaxb2-plugin utilizza l'implementazione di riferimento JAXB da Oracle / Sun
- CXF e jaxb2-maven-plugin utilizzano Apache Xerces
Su un lieve tangente: c'era un problema con l'utilizzo di Maven-jaxb2-plugin con Eclipse Indigo che ho postato qui . Una correzione (estensione) è recentemente diventato disponibile.
Questa non è destinato a non essere d'accordo, a tutti, con la raccomandazione di Maven-jaxb2-plugin over maven2-JAXB-plugin. Non lo so, ma mi aspetto che maven2-JAXB-plugin ha lo stesso problema, probabilmente irrisolto.
Direi che uno è per la specifica originale JAXB e Codehaus uno è per la specifica JAXB 2.1 (e, se il dev.java.net caricherebbe po 'di tempo in questo secolo, sarei in grado di dire con certezza) .