2

我使用带有 Jibx 的 Spring Object-Xml 映射将一些 xsd 文件转换为 Java 源文件。Jibx 在构建过程中由 jibx-maven-plugin 调用。我的模式文件 (.xsd) 有一个命名空间“abcom”,但我希望生成的 Java 源位于包“a.com”下,因为其余的 Java 代码都是这样组织的。

我注意到 Java 包是根据 xsd 的命名空间自动确定的。因此,问题是:当在模式文件中定义命名空间时,使用 Jibx Maven 插件时,是否可以在 xsd->Java 转换中设置输出 Java 源文件的 java 包?

到目前为止提出的解决方案:

1) 使用构建执行

建议如下。

问题:

  • xsd->Java 转换在每次构建时运行。我想手动运行它,或者只在我更改 xml 模式时运行。
  • custom.xml 中的 prefer-inline 属性与此设置的作用不同,内联对象引用的属性

2)使用自定义xml设置Java包

此处建议:Jibx Codegen:自定义文件 - 每个模式的包

问题:它没有工作。

3) 模块化架构

此处建议:Jibx Maven 插件:模式之间的交叉引用,当它们在不同的构建执行中转换时

问题:为每个模式设置一个 pom、为每个模式生成一个 jar 并将该 jar 导入其他模式中太复杂了。

当在 xml 模式中定义命名空间时,是否有人成功地解决了这些问题并且能够在 xsd->Java 转换中设置自定义 Java 包?

提前致谢。

4

1 回答 1

3

根据文档,可以这样做:

 <plugin>
    <groupId>org.jibx</groupId>
    <artifactId>jibx-maven-plugin</artifactId>
    <version>1.2.4.5</version>
    <configuration>
        <schemaLocation>src/main/conf</schemaLocation>
        <includeSchemas>
            <includeSchema>myschema.xsd</includeSchema>
        </includeSchemas>
        <options>
            <package>my.package</package>
        </options>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
        </execution>
    </executions>
</plugin>

但是你应该小心使用包名而不是来自 xsd 命名空间的默认值,因为如果你有多个命名空间,你可能会在生成的源代码中发生冲突。

您可以定义多个执行以具有具有不同包名称的不同模式。

 <plugin>
    <groupId>org.jibx</groupId>
    <artifactId>jibx-maven-plugin</artifactId>
    <version>1.2.4.5</version>
    <executions>
        <execution>
            <id>schemata-a</id>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
            <configuration>
              <schemaLocation>src/main/conf-a</schemaLocation>
              <includeSchemas>
                <includeSchema>myschema.xsd</includeSchema>
              </includeSchemas>
              <options>
                <package>my.package.a</package>
              </options>
            </configuration>
        </execution>
        <execution>
            <id>schemata-b</id>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
            <configuration>
              <schemaLocation>src/main/conf-b</schemaLocation>
              <includeSchemas>
                <includeSchema>xyz.xsd</includeSchema>
              </includeSchemas>
              <options>
                <package>my.package.b</package>
              </options>
            </configuration>
        </execution>

    </executions>
</plugin>

如果您可以更改 xsd 文件中的名称空间,那么生活会更轻松。

于 2012-08-09T07:33:19.397 回答