我使用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)使用构建执行
以下提议。
问题:
2)使用customization xml设置Java包
此处提议:Jibx Codegen: customization file - package per schema
问题:它不起作用。
3)模块化架构
问题:为每个模式设置一个pom太复杂,为每个模式生成一个jar并在其他模式中导入jar。
是否有人成功解决了这些问题,并且能够在xml架构中定义名称空间时在xsd-> Java转换中设置自定义Java包?
提前致谢。
答案 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文件中的命名空间,那么生活会更轻松。