2

我正在使用 jaxb2-maven-plugin 从 jaxb 注释类生成 XSD。

配置看起来像这样

<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 目录,因此尝试为子目录中的类生成模式。

有没有办法避免这种情况?

4

1 回答 1

0

您可以使用xjcSourceExcludeFilters过滤 ie 定义的源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

有关在此处使用此功能的更多详细信息以及有关在此处定义过滤器的更多详细信息。

于 2018-01-03T12:38:59.467 回答