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

时间:2012-08-09 05:06:38

标签: java maven jibx

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

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

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

1)使用构建执行

以下提议。

问题:

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

2)使用customization 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。

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

基于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-namespaces的默认值,因为如果你有多个命名空间,你可能会在生成的源代码中发生冲突。

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

 <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文件中的命名空间,那么生活会更轻松。