Maven JAXB 插件的差异

我已经确定,两个 JAXB插件的 玛文2存在,与一些不同的配置。

一个来自 Sun: http://jaxb.dev.java.net/jaxb-maven2-plugin/,另一个来自 Mojohaus: http://mojohaus.org/jaxb2-maven-plugin/

这两个插件中的哪一个可以推荐?


谢谢 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 来的那个。

103598 次浏览

我猜测其中一个是针对最初的 JAXB 规范的,而 codehaus 是针对 JAXB 2.1规范的(如果 dev.java.net 将在本世纪某个时候加载,我可以肯定地说)。

让我们总结一下,我们已经有了:

  1. Maven-jaxb2-插件(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)

根据 这根线的注释,我一直使用 Maven-jaxb2-插件(即插件 # 1) :

关于 Maven2: maven-jaxb2-plugin VS Maven2: maven-jaxb-plugin, 从我的角度来看 第一个 (http://maven-jaxb2-plugin.java.net/).

这个插件有更多的功能 比 Maven2: maven-jaxb-plugin, 发展是活跃的。最后, 我是作者之一:)我想说 我们与 JAXB 开发人员保持联系 和用户,并对最新的反应 功能/要求。

事实上,插件2已经死了。而且因为我一直对 # 1很满意,所以我从来没有使用过 # 3插件,所以我也不能说什么。以防万一,下面是第一个插件的工作配置:

<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-插件的作者。

Maven-jaxb2-plugin 目前使用 JAXB 2.1。

至于“哪个插件更好”的讨论,检查一下特征,你自己决定。如果你错过了一些功能,让我知道。

稍微偏离一点: 我在发布的 给你中提到了在 Eclipse 靛蓝中使用 maven-jaxb2-plugin 时出现的一个问题。最近有一个修复程序(扩展程序)可用。

这并不意味着不同意 maven2-jaxb2-plugin 比 maven2-jaxb-plugin 的建议。我不知道,但我认为 maven2-jaxb-plugin 也有同样的问题,可能还没有解决。

我最近尝试了上面提到的三个插件(也包括在这里) :

  1. Maven-jaxb2-plugin (http://maven-jaxb2-plugin.java.net/)
  2. Maven-jaxb-plugin (https://jaxb.dev.java.net/jaxb-maven2-plugin/)
  3. Jaxb2-maven-plugin (http://mojo.codehaus.org/jaxb2-maven-plugin/)

我最终使用了第四个选项: CXF XJC Maven 插件 http://cxf.apache.org/cxf-xjc-plugin.html

如果我遗漏了一些我想知道的东西,但是配置看起来对于我正在尝试做的事情更简单,并且更容易让我处理同一名称空间内的重复类生成——类似于这个问题: 有没有一种方法来处理 JAXB 中跨多个. xsd 文件的重复元素定义?

现在,我对每个传入的 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-plugin 使用 Oracle/Sun 的 JAXB 引用实现
  • Cxf 和 jaxb2-maven-plugin 使用 Apache Xerces