wake-up-neo.com

Unterschied der Maven JAXB Plugins

Ich habe festgestellt, dass zwei [~ # ~] jaxb [~ ​​# ~] Plugins für Maven 2 existieren, mit einigen unterschiedlichen Konfigurationen.

Der eine stammt von Sun: http://jaxb.dev.Java.net/jaxb-maven2-plugin/ , der andere von Mojohaus: http://mojohaus.org/jaxb2) -maven-plugin /

Welches dieser beiden Plugins kann empfohlen werden?


Vielen Dank, Matt. Bei meinem kleinen Forschungsprojekt habe ich festgestellt, dass es ein ganz anderes Plugin gibt, das von den Sunnern kommt:

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

und das:

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

und immer noch der aus Codehouse.

122
cuh

Lassen Sie uns zusammenfassen. Wir haben:

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

Basierend auf den Kommentaren von diesem Thread habe ich immer maven-jaxb2-plugin (d. H. Plugin # 1) verwendet:

In Bezug auf das org.jvnet.jaxb2.maven2: maven-jaxb2-Plugin versus com.Sun.tools.xjc.maven2: maven-jaxb-Plugin ist es aus meiner Sicht definitiv das erste ( http://maven-jaxb2-plugin.Java.net/ ).

Dieses Plugin hat viel mehr Funktionen als com.Sun.tools.xjc.maven2: Maven-Jaxb-Plugin, die Entwicklung ist aktiv. Schließlich bin ich einer der Autoren :) und ich würde sagen, dass wir mit JAXB-Entwicklern und -Nutzern in Kontakt bleiben und auf die neuesten Funktionen/Anfragen reagieren.

Und tatsächlich ist das Plugin # 2 nicht sehr aktiv (tot?). Und weil ich schon immer mit # 1 zufrieden war, habe ich Plugin # 3 noch nie benutzt, daher kann ich nichts dazu sagen. Für den Fall, hier ist eine funktionierende Konfiguration für 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>
101
Pascal Thivent

Ich habe kürzlich die drei oben genannten Plug-Ins ausprobiert (auch hier enthalten):

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

Ich habe eine vierte Option gewählt: Das CXF XJC Maven Plugin http: //cxf.Apache.org/cxf-xjc-plugin .html

Wenn ich etwas vermisse, das ich gerne wissen möchte, aber die Konfiguration für das, was ich versuchte, unkomplizierter zu sein schien und es mir einfacher machte, die Generierung von doppelten Klassen im selben Namespace zu behandeln - ähnlich wie bei dieser Frage: Gibt es eine Möglichkeit, mit doppelten Elementdefinitionen in mehreren .xsd-Dateien in JAXB umzugehen? .

Ich habe jetzt eine detaillierte Kontrolle über jede eingehende XSD und das zugehörige Java Paket; hier ist eine Beispielkonfiguration, die der von mir verwendeten nahe kommt.

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

Ich bin der Autor von maven-jaxb2-plugin .

Das maven-jaxb2-Plugin verwendet derzeit JAXB 2.1. In den nächsten Versionen werden wir auch JAXB 2.0- und JAXB 2.2-Versionen bereitstellen.

Wie für "welches Plugin ist besser" Diskussion, überprüfen Sie die Funktionen , entscheiden Sie selbst. Lassen Sie mich wissen, wenn Sie einige Funktionen vermissen.

20
lexicore
  • das maven-jaxb2-Plugin verwendet die JAXB-Referenzimplementierung von Oracle/Sun
  • cxf und jaxb2-maven-plugin verwenden Apache Xerces
3
rds

Ein wenig tangential: Es gab ein Problem mit der Verwendung von Maven-Jaxb2-Plugin mit Eclipse Indigo, das ich gepostet habe hier . Ein Update (Erweiterung) wurde vor kurzem verfügbar.

Dies soll der Empfehlung von maven-jaxb2-plugin gegenüber maven2-jaxb-plugin keinesfalls widersprechen. Ich weiß es nicht, aber ich gehe davon aus, dass das maven2-jaxb-plugin dasselbe Problem hat, wahrscheinlich ungelöst.

2
Ed Staub

Ich würde vermuten, dass eines für die ursprüngliche JAXB-Spezifikation und das Codehaus für die JAXB 2.1-Spezifikation ist (und wenn dev.Java.net in diesem Jahrhundert einige Zeit laden würde, könnte ich sicher sagen).

0
matt b