Какие артефакты я должен использовать для JAXB RI в моем проекте Maven?

Исторически я всегда использовал следующие артефакты JAXB RI в своих проектах Maven:

  • com.sun.xml.bind:jaxb-impl - время выполнения
  • com.sun.xml.bind:jaxb-xjc - компилятор схемы
  • com.sun.xml.bind:jaxb-jxc - генератор схемы

Так как примерно версия 2.2.10* эти артефакты теперь описываются как "старые":

com.sun.xml.bind:jaxb-impl

Старый JAXB Runtime модуль.

Похоже, эти артефакты устарели.

Вопрос в том:

Какие артефакты следует использовать вместо?

2 ответа

Решение

После разъяснения с Oracle, следует использовать следующие артефакты:

время выполнения

Если вы хотите демонтировать XML в объекты Java или упорядочить объекты Java как XML:

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>...</version>
</dependency>

Компилятор схемы (XJC)

Если у вас есть XML-схема и вы хотите сгенерировать из нее код Java:

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-xjc</artifactId>
    <version>...</version>
</dependency>

Генератор схемы (JXC /schemagen)

Если у вас есть классы Java с аннотациями JAXB и вы хотите создать схему XML на их основе:

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-jxc</artifactId>
    <version>...</version>
</dependency>

Два последних артефакта (org.glassfish.jaxb:jaxb-xjc а также org.glassfish.jaxb:jaxb-jxc) заключены в плагины Maven, поэтому они обычно не нужны во время выполнения.

Использование Eclipse

Если ваши проекты Maven как-то не получают полный путь к классу, включите отладочный вывод и проверьте консоль Maven. Вы можете увидеть следующее сообщение об ошибке:

[ОШИБКА] 'dependencyManagement.dependencies.dependency.systemPath' для com.sun:tools:jar должен указывать абсолютный путь, но равен ${tools.jar} @

Это связано со следующей проблемой:

Maven неправильно выбирает JAVA_HOME

Решение от @rustyx состоит в том, чтобы добавить -vm вариант к eclipse.ini:

-vm
<PATH_TO_JDK>\jre\bin\javaw.exe

Для последней версии JAXB 2 версии 2.3.3 в соответствии с реализацией Eclipse JAXB это координаты Maven для реализации Eclipse артефактов JAXB:

      <!-- API classes for Jakarta XML Binding. Required to compile against Jakarta XML Binding. -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.3</version>
</dependency>

<!-- Contains the main runtime used for serialization and deserialization java objects to/from xml. -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.6</version>
</dependency>

<!-- Tool to generate Jakarta XML Binding java sources from XML representation. -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-xjc</artifactId>
    <version>2.3.6</version>
</dependency>

<!-- Tool to generate XML schema from Jakarta XML Binding java sources. -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-jxc</artifactId>
    <version>2.3.6</version>
</dependency>

Кроме того, в документации говорится, что

В общемcom.sun.xml.bindвместо этого должны использоваться артефакты.

Координаты maven для них:

      <!-- API classes for Jakarta XML Binding. Required to compile against Jakarta XML Binding. -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.3</version>
</dependency>

<!-- RI Implementation of JAXB runtime jar. -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.6</version>
</dependency>

<!-- Class generation tool jar. -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-xjc</artifactId>
    <version>2.3.6</version>
</dependency>

<!-- Schema generation tool jar. -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-jxc</artifactId>
    <version>2.3.6</version>
</dependency>

РЕДАКТИРОВАТЬ: документация для JAXB версии 2.3.3 уже удалена. Вот ссылка на тот же раздел для JAXB 2.3.7

Другие вопросы по тегам