2010-03-12 4 views
113

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

Тот от Солнца: http://jaxb.dev.java.net/jaxb-maven2-plugin/, другой из Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

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


Thanks Matt. На моем небольшом исследовательском проекте, я обнаружил, что там совсем другой плагин пришедшего от 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.

ответ

93

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

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

Основываясь на комментариях this thread, я всегда использовал 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> 
+1

Thx для конфигурации. В конце я использую плагин codehouse, который дает мне те же возможности для моих нужд. Насколько я видел, только синтаксис отличается. – cuh

+0

Как насчет http://ws.apache.org/jaxme/mp/, который упоминается непосредственно на сайте Maven? – rcl

+1

@rcl: Не могу сказать много об этом, но поскольку он не обновлялся более 4 лет, я не уверен, что буду использовать его. Я просто доволен [maven-jaxb2-plugin] (https://maven-jaxb2-plugin.dev.java.net/). –

0

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

+0

Да, и если это будет возможно загрузите плагин ** org.jvnet.jaxb2.maven2 **, я бы сравнил их. Поскольку репо java не обеспечивает плагин, он вышел из игры, хотя синтаксис конфигурации казался немного более удобным. – cuh

19

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

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

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

+0

Возможно ли генерировать схемы из классов с помощью maven-jaxb2-plugin? Или плагин поддерживает только xsd-> Java? –

+0

В настоящее время это только xsd-> java. – lexicore

+0

Является ли имя «maven-jaxb2-plugin» не нарушением [Соглашения о назначении имени плагина Maven] (https://maven.apache.org/guides/plugin/guide-java-plugin-development.html # Plugin_Naming_Convention_and_Apache_Maven_Trademark) или это официальный плагин maven? Я не против имени, но поскольку он никогда не обновлялся, я думал, что плагин больше не будет поддерживаться. – FrVaBe

2

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

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

36

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

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

Я закончил с использованием четвертого варианта: CXF XJC Maven Pluginhttp://cxf.apache.org/cxf-xjc-plugin.html

Если мне не хватает чего-то, что я хотел бы знать, но конфигурация казалась более простой для того, что я пытался сделать, и более легко разрешил мне иметь дело с повторяющимся поколением классов в одном и том же пространстве имен - подобно этому вопрос: Is there a way to deal with duplicate element definitions across multiple .xsd files in 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

+0

Кто-нибудь знает, есть ли для этого разъем Eclipse m2e? Я сделал какой-то поисковик и не нашел его. Надеюсь, я просто пропустил это, потому что мне нравится этот вариант. – user944849

+0

cxf-xjc-plugin имеет соединитель Eclipse с 2017 года. Но я не вижу проблемы с созданием кода, запускающего maven и добавления исходного каталога. На самом деле, мой опыт заключается в том, что проекты с сгенерированными классами (JAXB, XMLBeans) лучше остаются закрытыми и зависят от двоичной формы (jar). Затем IDE работает быстрее, и нет проблем с classpath (особенно с XMLBeans). –

3
  • Maven-jaxb2-плагин использует эталонную реализацию JAXB по Oracle/Sun
  • CXF и jaxb2-Maven-плагин использовать Apache Xerces
Смежные вопросы