Różnica między wtyczkami Maven JAXB


126

Ustaliłem, że istnieją dwie wtyczki JAXB dla Maven 2 z różnymi konfiguracjami.

Jeden pochodzi z Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/ , drugi z Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

Którą z tych dwóch wtyczek można polecić?


Dzięki Matt. Podczas mojego małego projektu badawczego odkryłem, że istnieje całkiem inna wtyczka pochodząca od sunners:

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

i ten:

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

i wciąż ten z Codehouse.

Odpowiedzi:


104

Podsumujmy. Mamy:

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

Opierając się na komentarzach tego wątku , zawsze używałem wtyczki maven-jaxb2-plugin (tj. Wtyczki nr 1):

Jeśli chodzi o wtyczkę org.jvnet.jaxb2.maven2: maven-jaxb2-plugin versus com.sun.tools.xjc.maven2: maven-jaxb-plugin, z mojego punktu widzenia jest to zdecydowanie pierwsza ( http: // maven-jaxb2 -plugin.java.net/ ).

Ta wtyczka ma znacznie więcej funkcji niż com.sun.tools.xjc.maven2: maven-jaxb-plugin, rozwój jest aktywny. Wreszcie jestem jednym z autorów :) i powiedziałbym, że utrzymujemy kontakt z programistami i użytkownikami JAXB oraz reagujemy na najnowsze funkcje / prośby.

I rzeczywiście, wtyczka nr 2 nie jest bardzo aktywna (martwa?). A ponieważ zawsze byłem zadowolony z # 1, nigdy nie korzystałem z wtyczki # 3, więc tak naprawdę nie mogę nic o tym powiedzieć. Na wszelki wypadek, oto działająca konfiguracja dla wtyczki nr 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
Dzięki za config. W końcu korzystam z wtyczki Codehouse, która daje mi te same możliwości dla moich potrzeb. O ile widziałem, różni się tylko składnia.
— cuh

A co z ws.apache.org/jaxme/mp, o którym wspomniano bezpośrednio na stronie Mavena?
— rcl

1
@rcl: Nie mogę wiele o tym powiedzieć, ale ponieważ nie był aktualizowany od ponad 4 lat, nie jestem pewien, czy bym go użył. Jestem po prostu zadowolony z wtyczki maven-jaxb2-plugin .
— Pascal Thivent

1
Jeśli chodzi o numer 1, wydaje się, że witryna przechowująca dokumentację jest dzisiaj niedostępna. confluence.highsource.org/display/MJIIP/User+Guide Czy ten projekt jest aktywny?
— rds

2
@Gregor maven-jaxb2-pluginjest teraz hostowany na GitHub . Dokumentacja znajduje się na wiki .
— leksykor

44

Niedawno wypróbowałem trzy wymienione powyżej wtyczki (również tutaj):

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

Skończyło się na użyciu czwartej opcji: wtyczki CXF XJC Maven http://cxf.apache.org/cxf-xjc-plugin.html

Jeśli brakuje mi czegoś, co chciałbym wiedzieć, ale konfiguracja wydawała się prostsza dla tego, co próbowałem zrobić, i łatwiej pozwalała mi radzić sobie ze zduplikowanym generowaniem klas w tej samej przestrzeni nazw - podobnie do pytania: czy istnieje sposób radzenia sobie ze zduplikowanymi definicjami elementów w wielu plikach .xsd w JAXB? .

Mam teraz szczegółową kontrolę nad każdym przychodzącym XSD i odpowiadającym mu pakietem Java; oto przykładowa konfiguracja zbliżona do tej, której używam.

 <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
Doskonała sugestia. Właśnie tego spróbowałem i zadziałało jak urok - dziękuję.
— SGB

Czy ktoś wie, czy jest do tego złącze Eclipse m2e? Poszukałem google i nie znalazłem żadnego. Mam nadzieję, że po prostu to przegapiłem, ponieważ podoba mi się ta opcja.
— user944849

cxf-xjc-plugin ma złącze Eclipse od 2017 roku. Nie widzę jednak problemu z ręcznym wygenerowaniem kodu uruchamiającym maven i dodaniem katalogu źródłowego. W rzeczywistości z mojego doświadczenia wynika, że ​​projekty z wygenerowanymi klasami (JAXB, XMLBeans) lepiej pozostawić zamknięte i uzależnione w formie binarnej (jar). Wtedy IDE działa szybciej i nie ma problemów ze ścieżkami klas (szczególnie w przypadku XMLBeans).
— Vytenis Bivainis

Wygląda na to, że dodatek CXF XJC Maven obsługuje tylko generowanie źródeł Java ze schematu i nie jest w stanie wygenerować schematu z adnotacji Jaxb.
— alebu

19

Jestem autorem wtyczki maven-jaxb2-plugin .

Wtyczka maven-jaxb2-plugin używa obecnie JAXB 2.1. W kolejnych wersjach udostępnimy również wersje JAXB 2.0 i JAXB 2.2.

Jeśli chodzi o dyskusję „która wtyczka jest lepsza”, sprawdź funkcje , zdecyduj sam. Daj mi znać, jeśli przegapisz jakąś funkcjonalność.


Czy można generować schematy z klas za pomocą wtyczki maven-jaxb2? A może wtyczka obsługuje tylko xsd-> Java?
— Jörg

Obecnie jest to tylko xsd-> java.
— leksykor

Czy nazwa „maven-jaxb2-plugin” nie narusza konwencji nazewnictwa wtyczek Maven, czy też jest to oficjalna wtyczka Maven ? Nie przeszkadza mi nazwa, ale ponieważ nigdy nie była aktualizowana, pomyślałem, że wtyczka nie będzie już obsługiwana.
— FrVaBe

Wtyczka jest dość stara, została przyjęta, zanim stała się ustaloną konwencją. Wtyczka jaxb2-maven była już wtedy zajęta. Myślę, że tutaj ważne jest, aby unikać kolizji nazw. Jednak obecnie kompilacja wtyczek wymusza nawet te konwencje nazewnictwa, więc prawdopodobnie i tak będę musiał przeprowadzić migrację.
— leksykor

3
@lanoxx Nie, nie jest. Generalnie nie zaleca się kompilowania schematów z adresów URL. Twórz lokalne kopie schematów i używaj plików katalogów do przepisywania łączy.
— leksykor

3
  • maven-jaxb2-plugin używa referencyjnej implementacji JAXB firmy Oracle / Sun
  • cxf i jaxb2-maven-plugin używają Apache Xerces

2

Z drobną uwagą: wystąpił problem z użyciem wtyczki maven-jaxb2-plugin do Eclipse Indigo, które zamieściłem tutaj . Niedawno udostępniono poprawkę (rozszerzenie).

Nie oznacza to, że w ogóle nie zgadzam się z zaleceniem maven-jaxb2-plugin zamiast maven2-jaxb-plugin. Nie wiem, ale spodziewam się, że maven2-jaxb-plugin ma ten sam problem, prawdopodobnie nierozwiązany.


0

Wydaje mi się, że jeden jest przeznaczony dla oryginalnej specyfikacji JAXB, a kodhaus dla specyfikacji JAXB 2.1 (i jeśli dev.java.net załadowałby się kiedyś w tym stuleciu, mogę to z całą pewnością stwierdzić).


Tak, i gdyby można było pobrać wtyczkę org.jvnet.jaxb2.maven2 , porównałbym je. Ponieważ repozytorium java nie zapewnia wtyczki, jest poza grą, chociaż składnia konfiguracji wydawała się nieco wygodniejsza.
— cuh
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.