Различия в плагинах Maven JAXB

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

От Солнца: 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.

Ответ 1

Подведем итог. Мы имеем:

На основе комментариев этот поток, я всегда использовал maven-jaxb2-plugin (т.е. плагин # 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>

Ответ 2

Недавно я попробовал три упомянутых выше плагина (также здесь):

В итоге я использовал четвертый вариант: Плагин 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>

Ответ 3

Я являюсь автором maven-jaxb2-plugin.

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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