【问题标题】:Difference of Maven JAXB pluginsMaven JAXB 插件的区别
【发布时间】:2022-01-17 09:57:33
【问题描述】:

我已经确定存在两个用于Maven 2 的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 的那个。

【问题讨论】:

    标签: java maven-2 jaxb maven maven-plugin


    【解决方案1】:

    让我们总结一下。我们有/曾经:

    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)

    基于this thread的cmets,我一直使用maven-jaxb2-plugin(即插件#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>
    
    
    
        
    

    【讨论】:

    • 感谢配置。最后,我使用了 codehouse 插件,它为我提供了相同的功能来满足我的需求。据我所知,只有语法不同。
    • Maven 网站上直接提到的ws.apache.org/jaxme/mp 怎么样?
    • @rcl:不能说太多,但由于它已经超过 4 年没有更新,我不确定我是否会使用它。我对maven-jaxb2-plugin 很满意。
    • 至于#1,托管文档的站点今天似乎关闭了。 confluence.highsource.org/display/MJIIP/User+Guide这个项目这么活跃吗?
    • @Gregor maven-jaxb2-plugin 现在托管在 GitHub 上。文档位于wiki
    【解决方案2】:

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

    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

    如果我遗漏了一些我想知道的东西,但是对于我想要做的事情,配置似乎更简单,并且更容易让我处理同一命名空间内的重复类生成——类似于这个问题: 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>
    

    【讨论】:

    • 很好的建议。我刚试过这个,它就像一个魅力 - 谢谢。
    • 有谁知道这是否有 Eclipse m2e 连接器?我做了一些谷歌搜索,但没有找到。希望我只是错过它,因为我喜欢这个选项。
    • cxf-xjc-plugin 自 2017 年起具有 Eclipse 连接器。但我没有看到手动运行 maven 生成代码并添加源目录的问题。事实上,我的经验是生成类(JAXB、XMLBeans)的项目最好保持关闭状态并以二进制形式(jar)依赖。然后 IDE 工作得更快,没有类路径问题(尤其是 XMLBeans)。
    • 貌似CXF XJC Maven Plugin只支持从schema生成Java源码,不支持从Jaxb注解生成schema。
    【解决方案3】:

    我是maven-jaxb2-plugin的作者。

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

    至于“哪个插件更好”的讨论,check the features,自己决定。如果您遗漏了某些功能,请告诉我。

    【讨论】:

    • 是否可以使用 maven-jaxb2-plugin 从类生成模式?还是插件只支持xsd->Java?
    • 目前只有 xsd->java。
    • “maven-jaxb2-plugin”这个名字不违反Maven plugin naming conventions 还是官方的maven 插件?我不介意这个名字,但由于它从未更新,我认为该插件将不再维护。
    • @lanoxx 不,不是。通常不建议从 URL 编译模式。制作模式的本地副本并使用目录文件重写链接。
    【解决方案4】:
    • maven-jaxb2-plugin 使用 Oracle/Sun 的 JAXB 参考实现
    • cxf 和 jaxb2-maven-plugin 使用 Apache Xerces

    【讨论】:

      【解决方案5】:

      有点切题:我在here 发布的 Eclipse Indigo 中使用 maven-jaxb2-plugin 存在问题。最近有一个修复(扩展)可用。

      这并不意味着完全不同意 maven-jaxb2-plugin 优于 maven2-jaxb-plugin 的建议。我不知道,但我希望 maven2-jaxb-plugin 也有同样的问题,可能没有解决。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 是的,如果可以下载 org.jvnet.jaxb2.maven2 插件,我会比较它们。由于 java 的 repo 没有提供插件,所以退出游戏,虽然配置语法似乎更方便一些。
        猜你喜欢
        • 2014-05-16
        • 2015-05-13
        • 1970-01-01
        • 1970-01-01
        • 2014-09-29
        • 1970-01-01
        • 2011-03-05
        • 2019-02-25
        • 2011-04-15
        相关资源
        最近更新 更多