You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在父pom中跳过cxf-codegen-plugin执行但在子项目中生效

解决方案

你可以通过以下两种常用方案实现需求,避免父项目执行插件时报找不到wsdl的错误:


方案一:通过skip参数控制执行(改造成本最低)

利用cxf-codegen-plugin原生支持的skip配置,结合Maven属性实现父子项目差异化执行:

  1. 修改父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>
  1. 在需要执行插件的子项目POM中,覆盖属性值开启执行即可:
<!-- 子项目POM -->
<properties>
    <!-- 覆盖父项目属性,开启插件执行 -->
    <cxf-codegen.skip>false</cxf-codegen.skip>
    <!-- 配置当前子项目对应的wsdl文件名 -->
    <wsdl-name>你实际的wsdl文件名</wsdl-name>
</properties>

方案二:使用pluginManagement托管配置(符合Maven最佳实践)

如果你的父POM只是用来统一管理插件配置,不需要自身执行任何插件,可以将插件放到pluginManagement节点下,父项目默认不会执行该插件,只有子项目主动声明引用才会触发执行:

  1. 修改父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>
  1. 子项目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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:00:03