如何配置maven-jaxb2-plugin使其不参与主构建周期?
我之前也被这个问题折腾过,每次注释取消注释pom.xml太麻烦了,给你几个简洁靠谱的方案,选适合你的就行:
方案1:取消插件的自动构建阶段绑定(最省心)
maven-jaxb2-plugin默认会绑定到generate-sources阶段,所以常规构建(比如mvn package)会自动触发它。你只需要在插件的execution配置里,把phase显式设为none,就能取消这个自动绑定——这样只有手动执行mvn jaxb2:generate时插件才会运行,常规构建完全不会碰它。
示例配置:
<build> <plugins> <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>你的插件版本号</version> <executions> <execution> <id>generate-jaxb-sources</id> <!-- 关键配置:取消自动绑定到构建阶段 --> <phase>none</phase> <goals> <goal>generate</goal> </goals> <configuration> <!-- 你的WSDL相关配置 --> <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory> <!-- 其他自定义参数,比如生成代码的包名等 --> <packageName>com.yourcompany.wsdl.generated</packageName> </configuration> </execution> </executions> </plugin> </plugins> </build>
使用效果:
- 手动执行
mvn jaxb2:generate,插件正常生成源码 - 执行
mvn package时,插件完全不会被触发
方案2:用Maven Profile隔离插件
把jaxb2插件放到一个自定义的Profile里,默认不激活这个Profile。只有当你手动指定Profile时,插件才会生效。
示例配置:
<profiles> <profile> <id>generate-jaxb-code</id> <build> <plugins> <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>你的插件版本号</version> <executions> <execution> <id>generate-sources</id> <goals> <goal>generate</goal> </goals> <configuration> <!-- 你的WSDL配置 --> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>
使用方式:
- 手动生成源码:
mvn jaxb2:generate -P generate-jaxb-code(或者直接执行mvn generate-sources -P generate-jaxb-code,因为插件绑定了默认阶段) - 常规构建
mvn package时,因为Profile默认不激活,插件完全不参与构建流程
方案3:用属性开关控制插件跳过
在插件配置里绑定skip参数到一个Maven属性,默认开启跳过(常规构建时不运行),手动生成时通过命令行参数关闭跳过。
示例配置:
<properties> <!-- 默认开启跳过jaxb2插件 --> <jaxb2.plugin.skip>true</jaxb2.plugin.skip> </properties> <build> <plugins> <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>你的插件版本号</version> <configuration> <!-- 绑定skip到自定义属性 --> <skip>${jaxb2.plugin.skip}</skip> <!-- 你的WSDL配置 --> </configuration> </plugin> </plugins> </build>
使用方式:
- 手动生成源码:
mvn jaxb2:generate -Djaxb2.plugin.skip=false - 常规构建
mvn package时,因为默认属性值为true,插件会自动跳过
这三个方案里,方案1应该是最省心的,配置一次后不用每次加额外参数,完全符合你“手动触发才生成,常规构建自动忽略”的需求。
内容的提问来源于stack exchange,提问作者Gonzalo Calvo
相关产品推荐
相关产品推荐

