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

时间:2016-04-26 10:48:52

标签: maven jaxb jaxb2 maven-jaxb2-plugin

我的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以某种方式被修改。

我如何实现这一目标?

2 个答案:

答案 0 :(得分:4)

免责声明:我是maven-jaxb2-plugin的作者。

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

接下来,如果配置正确,插件将不会重新生成,除非更改内容。该插件收集“源”和“目标”文件,并且当且仅当“源”文件的时间戳比“目标”文件的时间戳更新时才生成。

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

然而,这假设插件可以干净地确定“源”和“目标”文件的时间戳。这是您应该将代码生成target/generated-source/<dir>而不是src/main/java的原因之一。

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

答案 1 :(得分:3)

此插件中为目标<goal>generate</goal>声明的默认阶段为generate-resources。参考Maven Default Lifecycle,你不能跳过阶段。 mvn phase-x命令总是表示“运行所有阶段直到阶段x,包括在内”。

您可以使用的选项是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

我希望这会有所帮助。