Разница в плагинах Maven JAXB
-
19-09-2019 - |
Вопрос
Я определил , что два ДЖАКСБ плагины для Мавен 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.
Решение
Давайте подведем итог.У нас есть:
- в maven-jaxb2-плагин (https://github.com/highsource/maven-jaxb2-plugin)
- в maven-jaxb-плагин (https://jaxb.dev.java.net/jaxb-maven2-plugin/)
- в 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>
Другие советы
Недавно я попробовал три плагина, упомянутых выше (также включенных здесь).:
- maven-jaxb2-плагин (http://maven-jaxb2-plugin.java.net/)
- maven-jaxb-плагин (https://jaxb.dev.java.net/jaxb-maven2-plugin /)
- 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 загружался какое-то время в этом столетии, я мог бы сказать наверняка).