如何在父pom中跳过cxf-codegen-plugin执行但在子项目中生效
解决方案
你可以通过以下两种常用方案实现需求,避免父项目执行插件时报找不到wsdl的错误:
方案一:通过skip参数控制执行(改造成本最低)
利用cxf-codegen-plugin原生支持的skip配置,结合Maven属性实现父子项目差异化执行:
- 修改父POM配置,新增跳过属性和skip配置:
<!-- 父POM的properties节点新增属性 --> <properties> <cxf.version>你的cxf版本</cxf.version> <!-- 父项目默认跳过插件执行 --> <cxf-codegen.skip>true</cxf-codegen.skip> </properties> <build> <plugins> <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>${cxf.version}</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <!-- 新增skip配置 --> <skip>${cxf-codegen.skip}</skip> <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/${wsdl-name}.wsdl</wsdl> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin> ... </plugins> </build>
- 在需要执行插件的子项目POM中,覆盖属性值开启执行即可:
<!-- 子项目POM --> <properties> <!-- 覆盖父项目属性,开启插件执行 --> <cxf-codegen.skip>false</cxf-codegen.skip> <!-- 配置当前子项目对应的wsdl文件名 --> <wsdl-name>你实际的wsdl文件名</wsdl-name> </properties>
方案二:使用pluginManagement托管配置(符合Maven最佳实践)
如果你的父POM只是用来统一管理插件配置,不需要自身执行任何插件,可以将插件放到pluginManagement节点下,父项目默认不会执行该插件,只有子项目主动声明引用才会触发执行:
- 修改父POM配置:
<!-- 父POM --> <build> <!-- 用pluginManagement托管插件配置,仅做统一配置,不触发执行 --> <pluginManagement> <plugins> <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>${cxf.version}</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/${wsdl-name}.wsdl</wsdl> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin> ... </plugins> </pluginManagement> <!-- 父项目自身的plugins节点不要配置cxf-codegen-plugin --> <plugins> <!-- 其他父项目需要执行的插件 --> ... </plugins> </build>
- 子项目POM中仅需简单声明引用插件即可:
<!-- 子项目POM --> <properties> <wsdl-name>你实际的wsdl文件名</wsdl-name> </properties> <build> <plugins> <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <!-- 不需要指定版本,继承父POMpluginManagement的配置 --> </plugin> </plugins> </build>
内容的提问来源于stack exchange,提问作者Aidyn
相关产品推荐
相关产品推荐

