maven-jaxb2-plugin: как выполнить эту командную строку xjc в pom.xml?

Из-за различных проблем с XSD, которые мне нужно скомпилировать (описанных в других сообщениях SO), у меня есть файл привязок, а также схема локального расширения. Следующая командная строка работает правильно, но у меня возникли проблемы с определением правильной конфигурации pom.xml для имитации этого:

xjc -nv src/main/resources/TCIPinclude0_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>TCIPinclude0_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.


person denishaskin    schedule 19.11.2014    source источник


Ответы (1)


Отказ от ответственности: я являюсь автором maven-jaxb2-plugin.

Значит, ваша компиляция зависит от порядка файлов схемы в команде XJC? Хм, интересно. Почему?

Пожалуйста, публикуйте mvn -X clean generate-sources лог в таких случаях.

Действительно кажется, что Maven не поддерживает порядок шаблонов файлов, поскольку я также получаю:

schemas=[file:/.../src/main/resources/local/ObaCcLocationReport.xsd,
         file:/.../src/main/resources/TCIP
schemas=[file:/.../src/main/resources/TCIP_4_0_0_Final.xsd,
         file:/.../src/main/resources/local/ObaCcLocationReport.xsd]
0_0_Final.xsd]

Это не то, что вы хотите. Может быть исправлено, сообщите о проблеме. (Я полагаюсь на одну из библиотек 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
schemas=[file:/.../src/main/resources/TCIP_4_0_0_Final.xsd,
         file:/.../src/main/resources/local/ObaCcLocationReport.xsd]
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 на низком уровне, но я не буду этого рекомендовать.
person lexicore    schedule 20.11.2014
comment
Нет, извините, я неясно выразился: похоже, они обрабатывались в порядке файловой системы, игнорируя порядок, в котором они были представлены в файле pom.xml. Я попробую полностью отдельные элементы <schema>, спасибо. - person denishaskin; 20.11.2014