Maven JAXB - 如何指定从XSD生成的根节点

时间:2012-06-07 13:02:30

标签: java xml maven xsd jaxb

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

我为此开发的替代解决方案,因此我从这一点开始的偏见依赖于自动XML Schema Refactoring(XSR)。它基本上是你的XSD,从一组XSD对象(在你的情况下可能是几个全局元素,也许是某些类型),它将生成一个XSD的子集,只包含必要的项目,没有绒毛。让这些XSD通过JAXB,它会给你你想要的。这涉及QTAssistant及其XSR功能。高级步骤是:

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

QTAssistant支持通过Exec Maven Plugin与Maven进行命令行集成,但仅限于Windows。

答案 1 :(得分: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>