Jaxb2 使用每个 mvn clean 包重新生成 类

Jaxb2 regenerate classes with every mvn clean package

我的 pom 看起来像

<plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.12.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <schemaLanguage>WSDL</schemaLanguage>
                <generateDirectory>src/main/java</generateDirectory>
                <schemaDirectory>src/main/resources/wsdl/</schemaDirectory>
                <schemaIncludes>
                    <include>*.xsd</include>
                    <include>draw/*.xsd</include>
                </schemaIncludes>
            </configuration>
        </plugin>

    </plugins>

当我执行 mvn clean package 时,它是根据配置构建的。但是,在我构建它之后,我不想每次执行 mvn clean package 时都构建它,除非 XSD 以某种方式被修改。

如何实现?

此插件中为目标 <goal>generate</goal> 声明的默认阶段是 generate-resources。参考 Maven Default Lifecycle 你不能跳过阶段。 mvn phase-x 命令总是表示 "run all phases until phase-x, inclusive".

您可以使用的选项是profile。因此您可以分析要构建的项目是否生成资源。

示例:

  <profiles>
    <profile>
        <id>GEN-RESOURCES</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jvnet.jaxb2.maven2</groupId>
                    <artifactId>maven-jaxb2-plugin</artifactId>
                    <version>0.12.3</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <schemaLanguage>WSDL</schemaLanguage>
                        <generateDirectory>src/main/java</generateDirectory>
                        <schemaDirectory>src/main/resources/wsdl/</schemaDirectory>
                        <schemaIncludes>
                            <include>*.xsd</include>
                            <include>draw/*.xsd</include>
                        </schemaIncludes>
                    </configuration>
                </plugin>

            </plugins>
        </build>
    </profile>
</profiles>

激活配置文件使用-P

mvn clean package -PGEN-RESOURCES

否则不会生成任何东西 Maven 配置文件解释 here

希望对您有所帮助。

免责声明: 我是 maven-jaxb2-plugin.

的作者

首先,不要生成成src/main/java

接下来,如果配置正确,插件将不会重新生成除非发生某些变化。该插件收集 "source" 和 "target" 文件,当且仅当 "source" 文件的时间戳比 "target" 文件的时间戳更新。

有关其工作原理的详细信息,请参阅文档中的 Up-to-Date Checks

但是,这假设插件可以清楚地确定 "source" 和 "target" 文件的时间戳。这就是为什么您应该将代码生成到 target/generated-source/<dir> 而不是 src/main/java.

中的原因之一

接下来,这绝对不适用于 mvn *clean* package,因为 *clean* 删除了 target,因此 target/generated-source/<dir>。所以只是 运行 mvn package 而不是 mvn clean package.