Вот мои настройки Maven Project (они унаследованы)
ROOT
--myProj
--pom.xml
--myProj-commons
--pom.xml
myProj-schemas
--pom.xml
--src
--main
--xsd
--something
--xsd1.xsd
--xsd2.xsd
--xjbs
--some-binding.xjb
myProj-schemas имеет упаковку jar и является дочерним для myProj-commons.
myProj-commons имеет упаковкуpom и является дочерним элементом myProj, даже если они находятся на одном уровне каталогов.
pom в myProj имеет упаковку pom.
ПРОБЛЕМА:
Во времяSchemaGen есть ошибки. С отладкой я вижу, что неправильный путь к XSD предоставляется в качестве аргументов XJC. Это используемый путь:
commons/myProj-schemas/src/main/xsd/something/xsd1.xsd
commons/myProj-schemas/src/main/xsd/something/xsd2.xsd
, когда он должен быть:
myProj-commons/myProj-schemas/src/main/xsd/something/xsd1.xsd
myProj-commons/myProj-schemas/src/main/xsd/something/xsd2.xsd
Таким образом, он обрезает префикс "myProj-".
Этоpom.xml для myProj:
....
<modelVersion>4.0.0</modelVersion>
<groupId>com.me</groupId>
<artifactId>myProj</artifactId>
<version>1.0-SNAPSHOT</version>
<name>myProj</name>
<packaging>pom</packaging>
<modules>
<module>../myProj-commons<module>
</modules>
<build>
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
....
Это pom.xml для myProj-commons:
....
<modelVersion>4.0</modelVersion>
<parent>
<groupId>com.me</groupId>
<artifactId>myProj</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../myProj/pom.xml</relativePath>
</parent>
<name>myProj-commons</name>
<artifactId>myProj-commons</artifactId>
<packaging>pom</packaging>
<modules>
<module>myProj-schemas</module>
</modules>
....
Это pom.xml для myProj-схем
....
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.me</groupId>
<artifactId>myProj-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<name>myProj-schemas</name>
<artifactId>myProj-schemas</artifactId>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
<goals>
<configuration>
<sources>
<source>src/main/xsd/something</source>
</sources>
<xjbSources>
<xjbSource>src/main/xjbs/some-binding.xjb</xjbSource>
</xjbSources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
....
Если переместить файл pom.xml из myProj на корневой уровень (и настроить другие poms), все будет работать нормально. Я знаю, что это предпочтительный способ сделать родитель / ребенок, но я имею дело с устаревшим кодом. Он должен быть в состоянии работать так, как он выложен. Это ошибка или я что-то упустил.