使用Maven与Apache CXF生成类时遇java.lang.NoSuchMethodError报错
解决Maven + Apache CXF 代码生成时
mvn clean install的问题 从你贴出的日志片段来看,目前能捕捉到几个关键信息:
- CXF插件的
wsdlRoot配置指向了本地的C:\Workspace\SDC\ALLXSDSchemaFiles\src\main\resources\wsdl目录 - Maven正在使用你配置的代理服务器
- 类路径包含了项目的
target/classes目录 - 正在调用
wsdl2java工具,但命令参数被截断了(只显示到-d C:\Workspace\SDC\ALLXSDSchemaFiles\src\main...)
下面是一步步的排查和解决建议:
1. 先拿到完整的wsdl2java执行命令
日志里的命令参数没显示全,这是定位问题的关键。你可以重新执行构建命令时加上调试参数:
mvn clean install -X
这样能看到完整的wsdl2java调用参数,重点确认:
-d指定的输出目录是否完整(当前截断的部分可能是路径配置错误)- 是否正确指定了要处理的WSDL文件(比如有没有
-wsdl参数对应具体的文件路径) - 有没有遗漏必要的配置(比如命名空间映射、绑定文件等)
2. 检查WSDL文件本身的有效性
- 先确认
wsdlRoot目录下的WSDL文件存在,且能正常打开(用浏览器或XML编辑器打开,看有没有语法错误) - 如果你的WSDL里引用了外部的XSD文件或其他远程资源,因为你开了代理,要确保代理能正常访问这些资源;要是访问不了,建议把外部XSD下载到本地,修改WSDL里的引用路径为本地相对路径
3. 核对Maven CXF插件的配置
打开你的pom.xml,检查CXF代码生成插件的配置是否合理,这里给个标准配置参考:
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>3.6.2</version> <!-- 换成你使用的CXF版本 --> <executions> <execution> <id>generate-cxf-sources</id> <phase>generate-sources</phase> <goals> <goal>wsdl2java</goal> </goals> <configuration> <wsdlRoot>src/main/resources/wsdl</wsdlRoot> <!-- 生成的代码建议放到target目录下,避免和手动编写的代码混在一起 --> <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot> <!-- 可选:如果有自定义绑定,加上bindingFiles配置 --> <!-- <bindingFiles> <bindingFile>src/main/resources/bindings.xml</bindingFile> </bindingFiles> --> </configuration> </execution> </executions> </plugin>
注意:别把生成的代码输出到src/main/java这类源码目录,最好放到target下的生成目录,这样clean命令能自动清理,也不会把生成代码提交到版本库。
4. 排查代理服务器的影响
日志显示Maven在使用代理,你可以先尝试临时禁用代理,看是否能正常构建:
- 要么注释掉
settings.xml里的代理配置,要么执行命令时加参数:
mvn clean install -DproxySet=false
如果禁用代理后构建成功,说明代理阻止了CXF访问某些资源(比如WSDL里的外部XSD),这时候需要调整代理的规则,或者把依赖的资源下载到本地。
5. 定位具体错误信息
如果上面的步骤都没解决问题,一定要看完整的错误日志。mvn clean install -X会输出所有调试信息,找到wsdl2java执行失败的具体报错(比如“找不到WSDL文件”“XSD解析错误”“权限不足”等),这些具体错误是快速定位问题的核心。
内容的提问来源于stack exchange,提问作者hell_storm2004
相关产品推荐
相关产品推荐

