Вопрос

Я определил , что два ДЖАКСБ плагины для Мавен 2 существуют, с несколькими различными конфигурациями.

Тот, что от Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/, другой из Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

Какой из этих двух плагинов можно порекомендовать?


Спасибо, Мэтт.В ходе моего небольшого исследовательского проекта я обнаружил, что от sunners появился совсем другой плагин:

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

и этот один:

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

и все еще тот, из Codehouse.

Это было полезно?

Решение

Давайте подведем итог.У нас есть:

  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-plugin против com.sun.tools.xjc.maven2:maven-jaxb-plugin, с моей точки зрения, это определенно первый (http://maven-jaxb2-plugin.java.net/).

Этот плагин обладает гораздо большим количеством функций чем com.sun.tools.xjc.maven2:maven-jaxb-plugin, разработка ведется активно.Наконец, Я один из авторов :) и я бы сказал мы поддерживаем связь с разработчиками 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. 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 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>

Я являюсь автором maven-jaxb2-плагин.

Maven-jaxb2-plugin в настоящее время использует JAXB 2.1.В следующих версиях мы также представим версии JAXB 2.0 и JAXB 2.2.

Что касается обсуждения вопроса "какой плагин лучше", проверьте функции, решайте сами.Дайте мне знать, если вам не хватает какой-то функциональности.

  • maven-jaxb2-plugin использует эталонную реализацию JAXB от Oracle / Sun
  • cxf и jaxb2-maven-plugin используют Apache Xerces

По незначительной касательной:возникла проблема с использованием maven-jaxb2-плагина с Eclipse Indigo, который я опубликовал здесь.Недавно стало доступно исправление (расширение).

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

Я бы предположил, что это для оригинальной спецификации JAXB, а codehaus - для спецификации JAXB 2.1 (и если бы dev.java.net загружался какое-то время в этом столетии, я мог бы сказать наверняка).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top