我有个问题。我有一个非常大的公司 XSD 文件,其中包含跨许多系统的许多对象的定义。我不想从这个 XSD 在我的单独项目中生成一些 java 类,但我不想生成在 XSD 中定义的所有类,因为我不只是需要它们。
是否可以在 Maven 中指定使用 JAXB 生成 java 类的 XSD 根节点之类的东西?
我希望我的问题很清楚:)
有一个用于生成可以接受 XJC 参数的 Java 类的插件,这可能是更高级配置中的一个钩子。但我对这些并不熟悉。
取自插件源码:
/**
* Space separated string of extra arguments,
* for instance <code>-Xfluent-api -episode somefile</code>;
* These will be passed on to XJC as
* <code>"-Xfluent-api" "-episode" "somefile"</code> options.
*
* @parameter expression="${xjc.arguments}"
*/
protected String arguments;
pom.xml 插件配置示例:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.3.1</version>
<executions>
<execution>
<id>xjc</id>
<phase>process-resources</phase>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<packageName>package.name</packageName>
<schemaDirectory>${basedir}/src/main/webapp/WEB-INF/xsd</schemaDirectory>
<bindingDirectory>${basedir}/src/main/java</bindingDirectory>
</configuration>
</plugin>
您的问题是我经常看到的问题,我会说大型 XSD 的典型问题。
不幸的是,我不知道控制生成过程的 JAXB 方式,而不是您想要的方式。
我为此开发的替代解决方案,因此我从这一点开始的偏见,依赖于自动 XML 模式重构 (XSR)。它基本上接受您的 XSD,并从一组 XSD 对象(在您的情况下可能是几个全局元素,也可能是某些类型)中,它会生成一个 XSD 子集,其中只包含必要的项目,没有绒毛。通过 JAXB 处理这些 XSD,它会为您提供您想要的东西。这涉及到 QTAssistant 及其 XSR 功能。高级步骤是:
QTAssistant 支持通过Exec Maven 插件与 Maven 进行命令行集成,但仅适用于 Windows。