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

wsimport Maven任务异常求助:仅首次执行有效,后续无法生成代码

解决jaxws-maven-plugin重复执行不生成代码&命令行调用无效的问题

我之前也踩过这个jaxws-maven-plugin的坑,太让人头疼了!结合你的问题描述,我来拆解下原因和解决办法:

问题根源分析

  1. 命令行调用mvn jaxws:wsimport忽略配置:你把所有配置都放在了<execution>节点里,但直接调用插件的默认goal时,Maven不会加载execution里的自定义配置,只会用插件的默认参数——这就是为什么你改了staleFile却没生效的原因。
  2. clean install后不生成代码:一方面是你指定的phase是process-classes(这个阶段在compile之后),clean后执行install时,插件可能在编译完成后才运行,导致生成的代码没被纳入编译;另一方面是插件的stale检查机制——它会通过stale文件判断是否需要重新生成代码,clean后可能stale文件还保留着,插件误以为不需要更新。

具体解决方案

方案1:调整插件配置,让命令行和生命周期都能正常工作

建议换用官方维护的jaxws-maven-plugin(org.codehaus.mojo的版本比较老旧,容易出bug),然后调整配置结构和参数:

<plugin>
    <!-- 改用官方groupId,版本用最新稳定版 -->
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>3.0.0</version>
    
    <!-- 配置生命周期内的执行逻辑 -->
    <executions>
        <execution>
            <id>generate-stubs1</id>
            <!-- 把phase改成generate-sources,确保代码在编译前生成 -->
            <phase>generate-sources</phase>
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>
                <wsdlUrls>
                    <wsdlUrl>http://www.webservicex.com/globalweather.asmx?wsdl</wsdlUrl>
                </wsdlUrls>
                <packageName>com.sth.remote</packageName>
                <!-- 关闭stale检查,强制每次执行都重新生成代码 -->
                <staleCheck>false</staleCheck>
                <staleFile>${project.build.directory}/jaxws/stale2</staleFile>
            </configuration>
        </execution>
    </executions>
    
    <!-- 根节点的configuration,让直接调用mvn jaxws:wsimport时也能读取到配置 -->
    <configuration>
        <wsdlUrls>
            <wsdlUrl>http://www.webservicex.com/globalweather.asmx?wsdl</wsdlUrl>
        </wsdlUrls>
        <packageName>com.sth.remote</packageName>
        <staleCheck>false</staleCheck>
        <staleFile>${project.build.directory}/jaxws/stale2</staleFile>
    </configuration>
</plugin>

方案2:如果不想修改插件groupId,针对旧版本的修复

如果你坚持用org.codehaus.mojo的版本,至少做这几个调整:

  • 把phase从process-classes改成generate-sources
  • 添加<staleCheck>false</staleCheck>到configuration里
  • 直接调用时指定execution id:mvn jaxws:wsimport@generate-stubs1,这样就能加载你自定义的配置了

额外小贴士

  • 执行mvn clean install前,可以先手动删除target/jaxws目录,彻底清除stale文件缓存
  • Eclipse里可以右键项目 → Maven → Update Project,强制刷新Maven配置,避免IDE缓存影响

内容的提问来源于stack exchange,提问作者Dawid D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:59:12