我一直在四处寻找这个问题。我找到了一些建议,但我不能让它们起作用,所以也许我做错了。
我在同一个maven项目中有相互依赖的XSD。我有commonA.xsd& commonB.xsd有泛型类型,我有一个特定的xsd引用这两个。问题是我无法使分层生成工作。
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.12.3</version>
<executions>
<execution>
<id>base</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaIncludes>
<include>commonA.xsd</include>
<include>commonB.xsd</include>
</schemaIncludes>
<generatePackage>common</generatePackage>
<generateDirectory>${project.build.directory}/generated-sources/xjc-common</generateDirectory>
</configuration>
</execution>
<execution>
<id>specific</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaIncludes>
<include>specific.xsd</include>
</schemaIncludes>
<generatePackage>specific</generatePackage>
<generateDirectory>${project.build.directory}/generated-sources/xjc-specific</generateDirectory>
</configuration>
</execution>
</executions>
</plugin>
我找到了这个页面https://stackoverflow.com/a/11135186/284263,建议引用该剧集文件
[ERROR] Error while parsing schema(s).Location [ file:/path/to/xsd/COMMONA.XSD{122,60}].com.sun.istack.SAXParseException2; systemId: file:/path/to/xsd/COMMONA.XSD; lineNumber: 122; columnNumber: 60; (the above customization is attached to the following location in the schema)
这对我来说不起作用,而且感觉有点笨拙。
我也研究了这个答案https://stackoverflow.com/a/22559100/284263。我无法在任何地方找到任何“真实”的例子,我不知道这对我的案例是否是正确的方法。
我在插件的documentation中发现我可以做这样的事情:
<episodes>
<episode>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin-tests-po</artifactId>
<!-- Version of the artifact. May be omitted.
The plugin will then try to find the version using
the dependencyManagement and dependencies of the project. -->
<version>${project.version}</version>
</episode>
</episodes>
据我了解,这是一个外部参考。它不起作用,因为尚未在回购中存在工件,例如在开发和使用SNAPSHOT版本时,或者可能存在风险,因为它会引用旧版本。
有任何建议或更正吗? 谢谢你的时间。