由于我需要编译的XSD的各种问题(在其他SO帖子中有描述),我有一个绑定文件和一个本地扩展架构。以下命令行可以正常工作,但我无法找出正确的pom.xml
配置来模仿这个:
xjc -nv src/main/resources/TCIP_4_0_0_Final.xsd src/main/resources/local/ObaCcLocationReport.xsd -b src/main/resources/local/rename.xjb -d target
主要是,如何指定多个XSD?我试过了:
<schemaDirectory>src/main/resources</schemaDirectory>
<schemaIncludes>
<include>TCIP_4_0_0_Final.xsd</include>
<include>local/ObaCcLocationReport.xsd</include>
</schemaIncludes>
但似乎忽略了第二个include
。
我也尝试过变种:
<schema>
<fileset>
<directory>src/main/resources</directory>
<includes>
<include>TCIP_4_0_0_Final.xsd</include>
<include>local/ObaCcLocationReport.xsd</include>
</includes>
</fileset>
</schema>
没有成功。建议?
修改
这可以作为一种解决方法,但它并不理想:
由于ObaCcLocationReport.xsd
依赖于作为TCIP_4_0_0_Final.xsd
的一部分编译的模式,我只需要确保它在之后编译,它似乎在处理文件文件路径顺序。因此,我将ObaCcLocationReport.xsd
放入x
子文件夹,并将pom.xml
更改为:
<schemaDirectory>src/main/resources</schemaDirectory>
<schemaIncludes>
<include>TCIP_4_0_0_Final.xsd</include>
<include>x/ObaCcLocationReport.xsd</include>
</schemaIncludes>
这会编译模式并正确生成Java文件。
答案 0 :(得分:1)
免责声明:我是maven-jaxb2-plugin的作者。
那么你的编译取决于XJC命令中模式文件的顺序?嗯,有趣。为什么呢?
请在这种情况下发布mvn -X clean generate-sources
日志。
Maven似乎没有维护文件模式的顺序,因为我也得到了:
schemas=[file:/.../src/main/resources/local/ObaCcLocationReport.xsd,
file:/.../src/main/resources/TCIP_4_0_0_Final.xsd]
这不是你想要的。可以修复,请file an issue。 (我依赖于其中一个Maven库,但可以采用不同的方式来维护顺序。)
您可以按如下方式对其进行配置:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<strict>false</strict>
<schemaIncludes/>
<schemas>
<schema>
<fileset>
<includes>
<include>TCIP_4_0_0_Final.xsd</include>
</includes>
</fileset>
</schema>
<schema>
<fileset>
<includes>
<include>local/ObaCcLocationReport.xsd</include>
</includes>
</fileset>
</schema>
</schemas>
</configuration>
</execution>
</executions>
</plugin>
给你:
schemas=[file:/.../src/main/resources/TCIP_4_0_0_Final.xsd,
file:/.../src/main/resources/local/ObaCcLocationReport.xsd]
注意:
<schemaIncludes/>
,否则src/main/resources/*.xsd
将默认包含在内。<strict>false</strict>
为您提供-nv
。args
/ arg
在低级别配置xjc
,但我不会推荐它。