Maven JAXB插件的区别


126

我确定存在两个用于Maven 2的JAXB插件,它们具有一些不同的配置。

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

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


谢谢马特。在我的小型研究项目中,我发现有许多来自sunner的插件:

<groupId>com.sun.tools.xjc.maven2</groupId>  
<artifactId>maven-jaxb-plugin</artifactId>  

那个:

<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>

还是Codehouse的那个

Answers:


104

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

  1. Maven的JAXB2-插件https://github.com/highsource/maven-jaxb2-plugin
  2. Maven的JAXB的插件https://jaxb.dev.java.net/jaxb-maven2-plugin/
  3. 所述JAXB2-Maven的插件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,从我的角度来看,它绝对是第一个(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>

1
Thx的配置。最后,我使用了代码仓库插件,它为我提供了满足我需求的相同功能。据我所知,只有语法不同。
cuh 2010年

关于什么ws.apache.org/jaxme/mp它直接提到在Maven的网站吗?
rcl 2010年

1
@rcl:不能多说,但是由于它已经超过4年没有更新,所以我不确定我会使用它。我只是对maven-jaxb2-plugin感到满意。
Pascal Thivent

1
至于排名第一的站点,今天托管文档的站点似乎已关闭。confluence.highsource.org/display/MJIIP/User+Guide这个项目活跃吗?
rds 2012年

2
@Gregor maven-jaxb2-plugin现在托管在GitHub上。该文档位于Wiki中
lexicore 2014年

44

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

  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>

1
很好的建议。我只是尝试了一下,它就像一个魅力一样工作-谢谢。
SGB

有谁知道是否为此使用Eclipse m2e连接器?我做了一些谷歌搜索,却没有找到。希望我只是想念它,因为我喜欢这个选项。
user944849 2013年

截至2017年,cxf-xjc-plugin具有Eclipse连接器。但是我看不到手动运行maven生成代码并添加源目录的问题。实际上,我的经验是,带有生成类(JAXB,XMLBeans)的项目最好保持关闭状态,并以二进制形式(jar)进行依赖。然后IDE可以更快地工作,并且没有类路径问题(尤其是XMLBeans)。
Vytenis Bivainis

看起来CXF XJC Maven插件仅支持从架构生成Java源,而不能从Jaxb批注生成架构。
alebu

19

我是maven-jaxb2-plugin的作者

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

至于“哪个插件更好”的讨论,请检查功能,然后自己决定。如果您错过了某些功能,请告诉我。


是否可以使用maven-jaxb2-plugin从类生成模式?还是该插件仅支持xsd-> Java?
约尔格,

当前仅xsd-> java。
lexicore

名称'maven-jaxb2-plugin'是否不违反Maven插件的命名约定,还是正式的Maven插件?我不介意这个名称,但由于从未更新过,我认为该插件将不再维护。
FrVaBe 2014年

该插件很旧,在成为惯例之前就被接受了。那时jaxb2-maven-plugin已经被带走了。我认为在这里避免名称冲突很重要。但是,如今的插件构建甚至强制执行了这些命名约定,因此无论如何我可能都必须迁移。
lexicore

3
@lanoxx不,不是。通常不建议从URL编译架构。制作模式的本地副本,并使用目录文件重写链接。
lexicore 2014年

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

2

略有切线:我在此处发布将maven-jaxb2-plugin与Eclipse Indigo结合使用时出现问题。修补程序(扩展名)最近可用。

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


0

我猜这是针对原始JAXB规范的,而码文豪是针对JAXB 2.1规范的(如果dev.java.net在本世纪可以加载一段时间,我可以肯定地说)。


是的,如果可以下载org.jvnet.jaxb2.maven2插件,我会进行比较。由于java的回购协议不提供插件,因此尽管配置语法似乎更加方便,但它已脱离游戏了。
cuh 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.