Различия в плагинах 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 загрузит некоторое время в этом столетии, я бы мог сказать наверняка).