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

Я использую плагин jaxb2-maven для генерации 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/execute /model содержит много классов, поэтому я хочу избежать перечисления их всех в отдельных <source> элементы. Вместо этого я указал, что хочу включить src/java/foo/rest/execution/model каталог, используя один <source> элемент.

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

foo/rest/execution/model/builder

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

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

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,

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

Другие вопросы по тегам