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
,
Более подробно об использовании этого здесь и более подробно об определении фильтров здесь.