jaxb2-maven-plugin — как отключить рекурсивный обход каталога при создании xsd из классов

Я использую jaxb2-maven-plugin для создания XSD из аннотированных классов jaxb.

Конфигурация выглядит так

<execution>
    <id>rest-api-execution-schemagen</id>
    <goals>
        <goal>schemagen</goal>
    </goals>
    <phase>generate-resources</phase>
    <configuration>
        <sources>
            <source>src/java/foo/rest/execution/model</source>
        </sources>
        <outputDirectory>${project.build.directory}/execution-api-xml-schema</outputDirectory>
    </configuration>
</execution>

Пакет foo/rest/execution/model содержит много классов, поэтому я не хочу перечислять их все в отдельных элементах <source>. Вместо этого я указал, что хочу включить весь каталог src/java/foo/rest/execution/model, используя один элемент <source>.

Проблема в том, что есть подпакеты:

foo/rest/execution/model/builder

... которые содержат другие классы, которые не аннотированы jaxb и не должны быть частью схемы. К сожалению, цель schemagen пытается рекурсивно обойти каталог foo/rest/execution/model и, следовательно, пытается сгенерировать схемы для классов в подкаталогах.

Есть ли способ избежать этого?


person mdzh    schedule 03.01.2018    source источник


Ответы (1)


Вы можете использовать xjcSourceExcludeFilters для фильтрации источников, определенных source, то есть для исключения пакетов, файлов и т. д.

Например:

<configuration>
    <sources>
        <source>src/java/foo/rest/execution/model</source>
    </sources>
    <xjcSourceExcludeFilters>
        <filter implementation="org.codehaus.mojo.jaxb2.shared.filters.pattern.PatternFileFilter">
            <patterns>
                <pattern>src/java/foo/rest/execution/model/builder/*.java</pattern>
            </patterns>
        </filter>
    </xjcSourceExcludeFilters>
    ...
</configuration>

Если встроенная поддержка фильтров не может удовлетворить ваши потребности, вы можете предоставить свою собственную реализацию, заменив org.codehaus.mojo.jaxb2.shared.filters.pattern.PatternFileFilter своей собственной реализацией AbstractFilter.

Подробнее об использовании этого здесь и не только подробности об определении фильтров здесь.

person glytching    schedule 03.01.2018
comment
Шаблон ‹pattern›src/java/foo/rest/execution/model/builder/*.java‹/pattern›, к сожалению, не работает :( Думаю, синтаксис неверен. - person mdzh; 03.01.2018
comment
Возможно, вам потребуется прочитать документацию и поэкспериментируйте с шаблонами фильтров или просто предоставьте собственную реализацию AbstractFilter. - person glytching; 03.01.2018
comment
Я считаю, что шаблон - это регулярное выражение, а не шаблон файла. Итак, вам понадобится что-то вроде builder/[a-zA-Z0-9]+\.java - person Cheeso; 11.05.2018