2010-03-12 67 views
113

我已经确定存在Maven 2的两个JAXB插件,并有一些不同的配置。Maven JAXB插件的区别

的一个是来自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之一。

回答

93

我们来总结一下。我们有:

  1. maven-jaxb2-pluginhttps://github.com/highsource/maven-jaxb2-plugin
  2. maven-jaxb-pluginhttps://jaxb.dev.java.net/jaxb-maven2-plugin/
  3. jaxb2-maven-pluginhttps://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 2010-03-16 16:14:47

+0

http://ws.apache.org/jaxme/mp/在Maven的网站上直接提到的是什么? – rcl 2010-07-19 19:18:41

+1

@rcl:不能多说,但由于它已经超过4年没有更新,所以我不确定我会使用它。我对[maven-jaxb2-plugin](https://maven-jaxb2-plugin.dev.java.net/)感到满意。 – 2010-07-19 19:29:15

0

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

+0

呀,如果有可能下载** org.jvnet.jaxb2.maven2插件**我会比较它们。由于java的回购没有提供插件,所以它不在游戏中,尽管配置语法看起来更方便一些。 – cuh 2010-03-12 14:29:23

19

我的maven-jaxb2-plugin作者。

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

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

+0

是否可以使用maven-jaxb2-plugin从类生成模式?或者该插件仅支持xsd-> Java? – 2013-05-21 03:47:34

+0

目前它只是xsd-> java。 – lexicore 2013-05-22 06:25:45

+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 2014-03-20 09:18:47

2

在一个小小的切线上:在Eclipse Indigo中使用maven-jaxb2-plugin时出现问题,我发布了here。修正(扩展)最近已经可用。

这并不意味着完全不同意maven-jaxb2-plugin与maven2-jaxb-plugin的建议。我不知道,但我期望maven2-jaxb-plugin具有相同的问题,可能无法解决。

36

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

  1. 行家-JAXB2-插件(http://maven-jaxb2-plugin.java.net/
  2. 行家,JAXB的插件(https://jaxb.dev.java.net/jaxb-maven2-plugin/)
  3. 的JAXB2-行家-插件(http://mojo.codehaus.org/jaxb2-maven-plugin/

我结束了使用第四选项:的CXF XJC Maven插件http://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 2013-05-06 22:09:33

+0

有谁知道是否有Eclipse m2e连接器?我做了一些Google搜索,没有找到。希望我错过了,因为我喜欢这个选项。 – user944849 2013-05-14 14:54:59

+0

cxf-xjc-plugin自2017年起拥有Eclipse连接器。但我没有看到手动生成代码并添加源代码目录的问题。事实上,我的经验是,生成类(JAXB,XMLBeans)的项目最好保持关闭状态,并以二进制形式(jar)为依据。然后,IDE工作得更快,并且没有类路径问题(特别是对于XMLBeans)。 – 2017-04-14 22:10:59

3
  • Maven的JAXB2-插件使用由甲骨文/ Sun的JAXB参考实现
  • CXF和JAXB2 - Maven的插件使用Apache Xerces的