Різниця плагінів Maven JAXB


126

Я визначив, що існують два плагіни JAXB для Maven 2, які мають різні конфігурації.

Один із Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/ , інший від Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

Який із цих двох плагінів можна рекомендувати?


Дякую Метт. На своєму маленькому дослідницькому проекті я виявив, що існує зовсім інший плагін, що йде від сонячних променів:

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

і той:

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

і все ще той із Codehouse.

Відповіді:


104

Давайте підведемо підсумки. Ми маємо:

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

Виходячи з коментарів цієї теми , я завжди використовував плагін maven-jaxb2 (тобто плагін №1):

Щодо org.jvnet.jaxb2.maven2: maven-jaxb2-плагін проти com.sun.tools.xjc.maven2: maven-jaxb-плагін, з моєї точки зору, це, безумовно, перший ( http: // maven-jaxb2 -plugin.java.net/ ).

Цей плагін має набагато більше можливостей, ніж com.sun.tools.xjc.maven2: maven-jaxb-плагін, розробка активна. Нарешті, я один з авторів :), і я б сказав, що ми підтримуємо зв’язок з розробниками та користувачами JAXB і реагуємо на останні можливості та запити.

І справді, плагін №2 не дуже активний (мертвий?). А оскільки я завжди був задоволений №1, я ніколи не використовував плагін №3, тому насправді нічого не можу сказати про це. На всякий випадок, ось робоча конфігурація для плагіна №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
Thx для конфігурації. Зрештою я використовую плагін кодового будинку, який дає мені ті ж можливості для моїх потреб. Тільки синтаксис відрізняється, наскільки я бачив.
cuh

А що з ws.apache.org/jaxme/mp, який згадується безпосередньо на сайті Мейвена ?
rcl

1
@rcl: Не можу багато про що сказати, але оскільки він не оновлювався більше 4 років, я не впевнений, що використовував би його. Я просто задоволений плагіном maven-jaxb2 .
Паскаль Thivent

1
Що стосується №1, то, здається, сайт, де розміщена документація, сьогодні знищений. confluence.highsource.org/display/MJIIP/User+Guide Цей проект активний?
rds

2
@Gregor maven-jaxb2-pluginзараз розміщений на GitHub . Документація знаходиться у вікі .
lexicore

44

Нещодавно я спробував три згадані вище плагіни (включені тут також):

  1. плагін maven-jaxb2 ( http://maven-jaxb2-plugin.java.net/ )
  2. плагін maven-jaxb ( https://jaxb.dev.java.net/jaxb-maven2-plugin/)
  3. плагін jaxb2-maven ( http://mojo.codehaus.org/jaxb2-maven-plugin/ )

Я в кінцевому підсумку використовував четвертий варіант: CXF XJC Maven Plugin http://cxf.apache.org/cxf-xjc-plugin.html

Якщо я пропускаю щось, що хотілося б знати, але конфігурація видалася більш простою для того, що я намагався зробити, і легше дозволило мені мати справу з генерацією дублікатів класу в одному просторі імен - подібно до цього питання: чи є спосіб розібратися з дублікатами визначення елементів у кількох .xsd файлах у JAXB? .

Тепер у мене є детальний контроль над кожним вхідним XSD та відповідним пакетом Java; ось зразок конфігурації, близький до тієї, яку я використовую.

 <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
Відмінна пропозиція. Я просто спробував це, і це спрацювало як шарм - дякую.
SGB

Хтось знає, чи є для цього роз'єм Eclipse m2e? Я зробив якийсь гуглінг і не знайшов його. Сподіваючись, що я просто пропустив це, тому що мені подобається цей варіант.
користувач944849

cxf-xjc-plugin має роз'єм Eclipse станом на 2017 рік. Але я не бачу проблеми з генеруванням коду Maven вручну та додаванням вихідного каталогу. Насправді мій досвід полягає в тому, що проекти з генерованими класами (JAXB, XMLBeans) краще залишити закритими і залежати від двійкової форми (банку). Тоді IDE працює швидше, і проблем з класовими шляхами немає (особливо з XMLBeans).
Вітеніс Бівайніс

Схоже, плагін CXF XJC Maven підтримує лише генерування джерел Java зі схеми, і не здатний генерувати схему з анотацій Jaxb.
алебу

19

Я автор плагіна Maven-jaxb2 .

Зараз плагін maven-jaxb2 використовує JAXB 2.1. У наступних версіях ми також пропонуємо версії JAXB 2.0 та JAXB 2.2.

Щодо обговорення "який плагін краще", перевірте функції , вирішіть самі. Повідомте мене, якщо ви пропустите деякі функції.


Чи можливо генерувати схеми з класів, використовуючи плагін maven-jaxb2? Або плагін підтримує лише xsd-> Java?
Йорг

Наразі це лише xsd-> java.
лексикор

Чи ім'я 'maven-jaxb2-plugin' не порушує правила про іменування плагінів Maven або це офіційний плагін Maven? Я не заперечую проти цього імені, але так як воно ніколи не оновлювалося, я думав, що плагін більше не підтримуватиметься.
FrVaBe

Плагін досить старий, він був створений ще до того, як це стало усталеною конвенцією. І jaxb2-maven-плагін вже тоді був знятий. Я думаю, що тут важливо уникати зіткнення імен. Однак на сьогоднішній день плагін навіть виконує ці умови іменування, тому, мабуть, мені доведеться все-таки перейти.
lexicore

3
@lanoxx Ні, це не так. Зазвичай не рекомендується складати схеми з URL-адрес. Створіть локальні копії схем і використовуйте файли каталогів, щоб переписати посилання.
lexicore

3
  • maven-jaxb2-плагін використовує посилання JAXB-посилання Oracle / Sun
  • cxf та jaxb2-maven-плагін використовують Apache Xerces

2

Злегка дотична: виникла проблема з використанням Maven-jaxb2-плагіна з Eclipse Indigo, яку я розмістив тут . Нещодавно стали доступні виправлення (розширення).

Це зовсім не покликане не погоджуватися з рекомендацією maven-jaxb2-plugin над maven2-jaxb-plugin. Я не знаю, але я очікую, що maven2-jaxb-плагін має ту саму проблему, ймовірно, не вирішену.


0

Я б здогадався, що це оригінал специфікації JAXB, а codehaus - для специфікації JAXB 2.1.


Так, і якби можна було завантажити плагін org.jvnet.jaxb2.maven2, я порівняв би їх. Оскільки репо ява не надає плагін, він виходить із гри, хоча конфігурація-синтаксис видалася трохи зручнішою.
cuh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.