Maven JAXB eklentilerinin farkı


126

Maven 2 için bazı farklı konfigürasyonlara sahip iki JAXB eklentisinin var olduğunu belirledim .

Biri Sun'dan: http://jaxb.dev.java.net/jaxb-maven2-plugin/ , diğeri Mojohaus'tan: http://mojohaus.org/jaxb2-maven-plugin/

Bu iki eklentiden hangisi önerilebilir?


Teşekkürler Matt. Küçük araştırma projemde, sunners'dan gelen oldukça başka bir eklenti olduğunu buldum:

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

ve şu:

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

ve hala Codehouse'dan.

Yanıtlar:


104

Özetleyelim. Sahibiz:

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

Bu konudaki yorumlara dayanarak, her zaman maven-jaxb2 eklentisini kullandım (yani eklenti # 1):

Org.jvnet.jaxb2.maven2: maven-jaxb2-plugin ve com.sun.tools.xjc.maven2: maven-jaxb-plugin ile ilgili olarak, benim bakış açıma göre kesinlikle ilk ( http: // maven-jaxb2 -plugin.java.net/ ).

Bu eklentinin com.sun.tools.xjc.maven2: maven-jaxb-plugin'den çok daha fazla özelliği var, geliştirme aktif. Son olarak, yazarlardan biriyim :) ve JAXB geliştiricileri ve kullanıcıları ile iletişim halinde olduğumuzu ve en son özelliklere / isteklere yanıt verdiğimizi söyleyebilirim.

Ve gerçekten de 2 numaralı eklenti çok aktif değil (ölü mü?). Ve her zaman # 1'den memnun olduğum için, 3 numaralı eklentiyi hiç kullanmadım, bu yüzden bunun hakkında hiçbir şey söyleyemem. Her ihtimale karşı, işte 1 numaralı eklenti için çalışan bir yapılandırma:

<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
Yapılandırma için teşekkürler. Sonunda, ihtiyaçlarım için aynı yetenekleri sağlayan kodevi eklentisini kullanıyorum. Gördüğüm kadarıyla sadece sözdizimi farklı.
cuh

Ya doğrudan Maven'in sitesinde bahsedilen ws.apache.org/jaxme/mp ?
rcl

1
@rcl: Bu konuda fazla bir şey söyleyemem ama 4 yıldan fazla bir süredir güncellenmediği için kullanacağımdan emin değilim. Birlikte mutluyum maven-jaxb2-eklentisi .
Pascal Thivent

1
1 numaraya gelince, belgeleri barındıran site bugün kapalı görünüyor. confluence.highsource.org/display/MJIIP/User+Guide Bu proje bu aktif mi?
RDS

2
@Gregor maven-jaxb2-pluginartık GitHub'da barındırılıyor . Dokümantasyon wiki içindedir .
lexicore

44

Yakın zamanda yukarıda belirtilen üç eklentiyi denedim (burada da dahil):

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

Dördüncü bir seçeneği kullandım: CXF XJC Maven Eklentisi http://cxf.apache.org/cxf-xjc-plugin.html

Bir şey eksik olursa ben bilmek istiyorum, ancak yapılandırma yapmaya çalıştığım ve daha kolay bana aynı ad alanı içinde yinelenen sınıf nesil başa izin verildi ne için daha anlaşılır gibiydi - Bu soruya benzer: orada bir mi JAXB'de birden çok .xsd dosyasında yinelenen öğe tanımlarıyla başa çıkmanın bir yolu? .

Artık her gelen XSD ve karşılık gelen java paketi üzerinde ayrıntılı kontrole sahibim; İşte benim kullandığıma yakın bir örnek yapılandırma.

 <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
Mükemmel öneri. Bunu sadece denedim ve bir çekicilik gibi çalıştı - teşekkür ederim.
SGB

Bunun için Eclipse m2e konektörü olup olmadığını bilen var mı? Biraz googling yaptım ve bir tane bulamadım. Umarım bu seçeneği sevdiğim için kaçırdım.
user944849

cxf-xjc-plugin, 2017 itibariyle Eclipse bağlayıcısına sahiptir. Ancak, manüel olarak maven çalıştırarak kod oluşturma ve kaynak dizini ekleme sorununu görmüyorum. Aslında, benim deneyimim, oluşturulan sınıflara (JAXB, XMLBeans) sahip projelerin kapalı ve ikili biçimde (jar) bağlı bırakılmasının daha iyi olmasıdır. Sonra IDE daha hızlı çalışır ve sınıf yolu sorunu olmaz (özellikle XMLBeans ile).
Vytenis Bivainis

Görünüşe göre CXF XJC Maven Eklentisi yalnızca şemadan Java kaynakları oluşturmayı destekliyor ve Jaxb açıklamalarından şema üretemiyor.
alebu

19

Ben yazarı değilim maven-jaxb2-eklentisi .

Maven-jaxb2 eklentisi şu anda JAXB 2.1 kullanıyor. Sonraki sürümlerde, JAXB 2.0 ve JAXB 2.2 sürümlerini de sağlayacağız.

"Hangi eklenti daha iyi" tartışmasına gelince , özellikleri kontrol edin, kendiniz karar verin. Bazı işlevleri kaçırırsanız bana bildirin.


Maven-jaxb2-eklentisini kullanarak sınıflardan şema oluşturmak mümkün mü? Veya eklenti yalnızca xsd-> Java'yı mı destekliyor?
Jörg

Şu anda yalnızca xsd-> java.
lexicore

'Maven-jaxb2-eklentisi' adı Maven eklenti adlandırma kurallarını ihlal etmiyor mu yoksa resmi bir maven eklentisi mi? Adı umursamıyorum ama hiç güncellenmediği için eklentinin artık korunmayacağını düşündüm.
FrVaBe

Eklenti oldukça eskidir, bu yerleşik bir konvansiyon haline gelmeden önce kabul edilmiştir. Ve jaxb2-maven-eklentisi o zamanlar çoktan alınmıştı. Burada isim çarpışmasından kaçınmanın önemli olduğunu düşünüyorum. Ancak günümüzde eklenti derlemesi bu adlandırma kurallarını uyguluyor, bu yüzden muhtemelen yine de taşınmam gerekecek.
sözlük

3
@lanoxx Hayır, değil. Şemaların URL'lerden derlenmesi genellikle tavsiye edilmez. Şemaların yerel kopyalarını oluşturun ve bağlantıları yeniden yazmak için katalog dosyalarını kullanın.
lexicore

3
  • maven-jaxb2-eklentisi, Oracle / Sun'ın JAXB referans uygulamasını kullanır
  • cxf ve jaxb2-maven-eklentisi Apache Xerces'i kullanır

2

Biraz teğet olarak: Burada yayınladığım Eclipse Indigo ile maven-jaxb2-eklentisinin kullanımıyla ilgili bir sorun vardı . Yakın zamanda bir düzeltme (uzantı) kullanıma sunulmuştur.

Bu, maven-jaxb2-eklentisinin maven2-jaxb-eklentisine göre önerisine kesinlikle katılmama anlamına gelmez. Bilmiyorum, ama maven2-jaxb-eklentisinin de aynı sorunu, muhtemelen çözülmemiş durumda olmasını bekliyorum.


0

Birinin orijinal JAXB spesifikasyonu için olduğunu ve codehaus'un JAXB 2.1 spesifikasyonu için olduğunu tahmin ediyorum (ve eğer dev.java.net bu yüzyılda biraz zaman yüklerse, kesin olarak söyleyebilirim).


Evet, org.jvnet.jaxb2.maven2 eklentisini indirmek mümkün olsaydı onları karşılaştırırdım. Java repo'su eklentiyi sağlamadığından, oyun dışıdır, ancak yapılandırma sözdizimi biraz daha uygun görünmektedir.
cuh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.