问题
我已经确定存在两个JAXBplugins forMaven2,具有一些不同的配置。
一个来自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的那个。
#1 热门回答(96 赞)
让我们总结一下。我们有:
- maven-jaxb2-plugin(https://github.com/highsource/maven-jaxb2-plugin)
- maven-jaxb-plugin(https://jaxb.dev.java.net/jaxb-maven2-plugin/)
- jaxb2-maven-plugin(https://github.com/mojohaus/jaxb2-maven-plugin)
根据this thread的评论,我一直使用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>
#2 热门回答(37 赞)
我最近尝试过上面提到的三个插件(也包括在这里):
- maven-jaxb2-plugin(http://maven-jaxb2-plugin.java.net/)
- maven-jaxb-plugin(https://jaxb.dev.java.net/jaxb-maven2-plugin/)
- 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>
#3 热门回答(20 赞)
我是maven-jaxb2-plugin的作者。
maven-jaxb2-plugin目前使用JAXB 2.1。在下一个版本中,我们还将提供JAXB 2.0和JAXB 2.2版本。
至于"哪个插件更好"讨论,check the features,自己决定。如果你错过了一些功能,请告诉我。