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
.
我的 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
.