0

我有个问题。我有一个非常大的公司 XSD 文件,其中包含跨许多系统的许多对象的定义。我不想从这个 XSD 在我的单独项目中生成一些 java 类,但我不想生成在 XSD 中定义的所有类,因为我不只是需要它们。

是否可以在 Maven 中指定使用 JAXB 生成 java 类的 XSD 根节点之类的东西?

我希望我的问题很清楚:)

4

2 回答 2

0

有一个用于生成可以接受 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>
于 2012-06-07T15:22:11.457 回答
0

您的问题是我经常看到的问题,我会说大型 XSD 的典型问题。

不幸的是,我不知道控制生成过程的 JAXB 方式,而不是您想要的方式。

我为此开发的替代解决方案,因此我从这一点开始的偏见,依赖于自动 XML 模式重构 (XSR)。它基本上接受您的 XSD,并从一组 XSD 对象(在您的情况下可能是几个全局元素,也可能是某些类型)中,它会生成一个 XSD 子集,其中只包含必要的项目,没有绒毛。通过 JAXB 处理这些 XSD,它会为您提供您想要的东西。这涉及到 QTAssistant 及其 XSR 功能。高级步骤是:

  • 建立一个新的 XSR 文件;
  • 在 XML 模式集合中引用您的源 XSD
  • 创建“发布”:图形编辑器可以帮助您。基本上,您匹配所需的顶级 XSD 对象和新的 XSD 文件位置。
  • 生成新的 XSD。
  • 将新的 XSD 与您的工件一起使用。

QTAssistant 支持通过Exec Maven 插件与 Maven 进行命令行集成,但仅适用于 Windows。

于 2012-06-07T15:11:23.790 回答