代码之家  ›  专栏  ›  技术社区  ›  Alan Evangelista

Jibx-Maven插件:如何在定义命名空间时在xsd->Java转换中设置Java包

  •  2
  • Alan Evangelista  · 技术社区  · 13 年前

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

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

    迄今为止提出的解决方案:

    1) 使用生成执行

    建议如下。

    问题:

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

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

    建议如下: Jibx Codegen: customization file - package per schema

    问题:它不起作用。

    3) 模块模式

    建议如下: Jibx Maven plugin: cross-reference among schemas when they are converted in different build executions

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

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

    提前谢谢。

    1 回复  |  直到 9 年前
        1
  •  3
  •   Betlista    12 年前

    基于 documentation it can be done like the following:

     <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>
    

    但是,您应该小心使用packagename,而不是来自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文件中的名称空间,则会使生活更轻松。