我的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
以某种方式被修改。
我如何实现这一目标?
答案 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
我希望这会有所帮助。