java Maven JAXB插件的区别

v64noz0r  于 2023-10-14  发布在  Java
关注(0)|答案(6)|浏览(182)

我已经确定存在两个Maven 2的JAXB插件,具有一些不同的配置。
一个来自太阳: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>

还是代码屋的那个

x6yk4ghg

x6yk4ghg1#

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

  1. jaxb-maven-pluginhttps://github.com/highsource/jaxb-tools),以前称为maven-jaxb 2-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-jaxb 2-plugin与com.sun.tools.xjc.maven2:maven-jaxb-plugin,从我的Angular 来看,它肯定是第一个(http://maven-jaxb2-plugin.java.net/)。
    这个插件比com.sun.tools.xjc.maven2:maven-jaxb-plugin有更多的功能,开发是活跃的。最后,我是作者之一:)我想说我们与JAXB开发人员和用户保持联系,并对最新的功能/请求做出React。
    事实上,Plugin #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>
falq053o

falq053o2#

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

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

rkue9o1l3#

我是maven-jaxb2-plugin的作者。
maven-jaxb 2-plugin目前使用JAXB 2.1。在下一个版本中,我们还将提供JAXB 2.0和JAXB 2.2版本。
至于“哪个插件更好”的讨论,check the features,自己决定。让我知道如果你错过了一些功能。

x8diyxa7

x8diyxa74#

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

3xiyfsfu5#

在一个轻微的切线:在Eclipse靛蓝中使用maven-jaxb 2-plugin有一个问题,我发布了here。最近有一个补丁(扩展)可用。
这并不意味着不同意maven-jaxb 2-plugin而不是maven 2-jaxb-plugin的建议。我不知道,但我希望maven 2-jaxb-plugin也有同样的问题,可能还没有解决。

kgqe7b3p

kgqe7b3p6#

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

相关问题