Perbedaan plugin Maven JAXB

126

Saya telah menentukan bahwa ada dua plugin JAXB untuk Maven 2, dengan beberapa konfigurasi yang berbeda.

Yang satu dari Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/ , yang lain dari Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

Manakah dari dua plugin ini yang bisa direkomendasikan?


Terima kasih, Matt. Pada proyek riset kecil saya, saya menemukan bahwa ada beberapa plugin lain yang datang dari sunners:

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

dan yang itu:

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

dan masih dari Codehouse.

cuh
sumber

Jawaban:

104

Mari kita simpulkan. Kita punya:

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

Berdasarkan komentar dari utas ini , saya selalu menggunakan plugin maven-jaxb2 (yaitu plugin # 1):

Mengenai org.jvnet.jaxb2.maven2: maven-jaxb2-plugin versus com.sun.tools.xjc.maven2: maven-jaxb-plugin, dari sudut pandang saya itu pasti yang pertama ( http: // maven-jaxb2 -plugin.java.net/ ).

Plugin ini memiliki lebih banyak fitur daripada com.sun.tools.xjc.maven2: maven-jaxb-plugin, pengembangannya aktif. Akhirnya, saya adalah salah satu penulis :) dan saya akan mengatakan kami tetap berhubungan dengan pengembang dan pengguna JAXB dan bereaksi terhadap fitur / permintaan terbaru.

Dan memang, plugin # 2 tidak terlalu aktif (mati?). Dan karena saya selalu senang dengan # 1, saya tidak pernah menggunakan plugin # 3 jadi tidak bisa mengatakan apa-apa tentang itu. Untuk berjaga-jaga, berikut adalah konfigurasi yang berfungsi untuk 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>
Thivent Pascal
sumber
1
Terima kasih untuk konfigurasi. Pada akhirnya saya menggunakan plugin codehouse, yang memberi saya kemampuan yang sama untuk kebutuhan saya. Hanya sintaks yang berbeda sejauh yang saya lihat.
cuh
Bagaimana dengan ws.apache.org/jaxme/mp yang disebutkan langsung di situs Maven?
rcl
1
@rcl: Tidak bisa mengatakan banyak tentang itu tetapi karena belum diperbarui selama lebih dari 4 tahun, saya tidak yakin saya akan menggunakannya. Saya senang dengan maven-jaxb2-plugin .
Pascal Thivent
1
Adapun # 1, situs hosting dokumentasi tampaknya turun hari ini. confluence.highsource.org/display/MJIIP/User+Guide Apakah proyek ini aktif?
rds
2
@Gregor maven-jaxb2-pluginsekarang di-host di GitHub . Dokumentasi ada di wiki .
lexicore
44

Saya baru-baru ini mencoba tiga plug-in yang disebutkan di atas (termasuk di sini juga):

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

Saya akhirnya menggunakan opsi keempat: CXF XJC Maven Plugin http://cxf.apache.org/cxf-xjc-plugin.html

Jika saya melewatkan sesuatu yang ingin saya ketahui, tetapi konfigurasi tampak lebih mudah untuk apa yang saya coba lakukan dan lebih mudah memungkinkan saya untuk berurusan dengan generasi kelas duplikat dalam namespace yang sama - mirip dengan pertanyaan ini: Apakah ada cara untuk menangani definisi elemen duplikat di beberapa file .xsd di JAXB? .

Saya sekarang memiliki kontrol granular atas setiap XSD yang masuk dan paket java yang sesuai; di sini adalah contoh konfigurasi yang dekat dengan yang saya gunakan.

 <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>
bn.
sumber
1
Saran yang bagus. Saya baru saja mencoba ini dan itu bekerja seperti mantra - terima kasih.
SGB
Adakah yang tahu kalau ada konektor Eclipse m2e untuk ini? Saya melakukan googling dan tidak menemukannya. Berharap saya hanya melewatkannya karena saya suka opsi ini.
user944849
cxf-xjc-plugin memiliki konektor Eclipse pada 2017. Tapi saya tidak melihat masalah menghasilkan kode yang secara manual menjalankan maven dan menambahkan direktori sumber. Bahkan, pengalaman saya adalah bahwa proyek dengan kelas yang dihasilkan (JAXB, XMLBeans) lebih baik dibiarkan tertutup dan bergantung pada dalam bentuk biner (guci). Kemudian IDE bekerja lebih cepat dan tidak ada masalah classpath (terutama dengan XMLBeans).
Vytenis Bivainis
Sepertinya Pengaya CXF XJC Maven hanya mendukung menghasilkan sumber Java dari skema, dan tidak mampu menghasilkan skema dari anotasi Jaxb.
alebu
19

Saya penulis maven-jaxb2-plugin .

Plugin maven-jaxb2 saat ini menggunakan JAXB 2.1. Dalam versi berikutnya kami juga akan menyediakan versi JAXB 2.0 dan JAXB 2.2.

Sedangkan untuk diskusi "plugin mana yang lebih baik", periksa fitur-fiturnya , putuskan sendiri. Beri tahu saya jika Anda melewatkan beberapa fungsi.

lexicore
sumber
Apakah mungkin untuk menghasilkan skema dari kelas menggunakan maven-jaxb2-plugin? Atau apakah plugin hanya mendukung xsd-> Java?
Jorg
Saat ini hanya xsd-> java.
lexicore
Apakah nama 'maven-jaxb2-plugin' tidak melanggar konvensi penamaan plugin Maven atau itu plugin maven resmi? Saya tidak keberatan dengan namanya tetapi karena tidak pernah diperbarui saya pikir plugin tidak akan dipertahankan lagi.
FrVaBe
Plugin ini sudah cukup tua, sudah dibentuk sebelum ini menjadi konvensi yang mapan. Dan jaxb2-maven-plugin sudah diambil saat itu. Saya pikir penting untuk menghindari tabrakan nama di sini. Namun saat ini plugin build bahkan menegakkan konvensi penamaan ini jadi mungkin saya harus tetap bermigrasi.
lexicore
3
@lanoxx Tidak, tidak. Biasanya tidak disarankan untuk menyusun skema dari URL. Buat salinan skema lokal dan gunakan file katalog untuk menulis ulang tautan.
lexicore
3
  • maven-jaxb2-plugin menggunakan implementasi referensi JAXB oleh Oracle / Sun
  • cxf dan jaxb2-maven-plugin menggunakan Apache Xerces
rds
sumber
2

Pada sedikit singgung: ada masalah dengan penggunaan maven-jaxb2-plugin dengan Eclipse Indigo yang saya posting di sini . Perbaikan (ekstensi) baru-baru ini tersedia.

Ini tidak dimaksudkan untuk tidak setuju, sama sekali, dengan rekomendasi maven-jaxb2-plugin lebih dari maven2-jaxb-plugin. Saya tidak tahu, tapi saya berharap bahwa maven2-jaxb-plugin memiliki masalah yang sama, mungkin belum terselesaikan.

Ed Staub
sumber
0

Saya kira satu untuk spesifikasi JAXB asli dan codehaus satu untuk spesifikasi JAXB 2.1 (dan jika dev.java.net akan memuat beberapa waktu abad ini, saya akan bisa mengatakannya dengan pasti).

matt b
sumber
Ya, dan jika mungkin untuk melakukan dowload plugin org.jvnet.jaxb2.maven2 saya akan membandingkannya. Karena repo dari java tidak menyediakan plugin itu keluar dari permainan, meskipun konfigurasi-sintaks sepertinya sedikit lebih nyaman.
cuh