Maven JAXB插件的区别

我已经确定了Maven 2的两个JAXB插件存在,有一些不同的configuration。

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

这两个插件哪个可以推荐?


谢谢Matt。 在我这个小小的研究项目上,我发现还有另外一个插件:

<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 ( 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-plugin (即插件#1):

关于org.jvnet.jaxb2.maven2:maven-jaxb2-plugin与com.sun.tools.xjc.maven2:maven-jaxb-plugin,从我的angular度来看,它绝对是第一个( http:// maven-jaxb2 -plugin.java.net/ )。

这个插件比com.sun.tools.xjc.maven2有更多的function:maven-jaxb-plugin,开发活动。 最后,我是作者之一:),我会说我们与JAXB开发人员和用户保持联系,并对最新的function/请求做出反应。

事实上,插件#2并不是非常活跃(死亡?)。 而且因为我一直对#1感到满意,所以我从来没有使用插件#3,所以不能说这些。 以防万一,这里是插件#1的工作configuration:

 <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. 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

如果我错过了一些我想知道的东西,但是configuration对我所要做的事情来说似乎更直接,而且更容易让我在相同的命名空间中处理重复的类生成 – 类似于这个问题: 是否有处理JAXB中多个.xsd文件的重复元素定义的方法? 。

我现在已经精细控制每个传入的XSD和相应的java包; 这里是一个接近我正在使用的示例configuration。

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

maven-jaxb2插件目前使用JAXB 2.1。 在接下来的版本中,我们还将提供JAXB 2.0和JAXB 2.2版本。

至于“哪个插件比较好”的讨论, 请检查一下function ,自己决定。 让我知道如果你错过了一些function。

在一个小小的切线上:使用Eclipse Indigo的maven-jaxb2-plugin,在这里贴出了一个问题。 修复(扩展)最近已经可用。

这并不意味着完全不同意maven-jaxb2-plugin相对于maven2-jaxb-plugin的build议。 我不知道,但我期望maven2-jaxb插件有同样的问题,可能无法解决。

  • maven-jaxb2-plugin使用Oracle / Sun的JAXB参考实现
  • cxf和jaxb2-maven-plugin使用Apache Xerces

我猜想一个是原始JAXB规范,codehaus是JAXB 2.1规范(如果dev.java.net会在本世纪加载一些时间,我可以肯定地说)。