cxf-xjc-plugin报cowardly refuses to write目录不存在错误如何解决
解决方案
核心问题原因
报错由两个配置缺陷共同导致:
- 插件默认以独立进程执行xjc任务,进程工作目录与项目根目录不一致,导致相对路径
src/main/java解析错误 - xsd配置仅指定资源目录,未开启批量扫描也未指定具体xsd文件,触发xjc底层参数校验异常
具体修复步骤
- 调整sourceRoot路径,优先遵循Maven规范将生成代码放到
target目录下,避免污染手动编写的源码,同时添加${project.basedir}前缀明确路径根目录 - xsd配置要么指定具体xsd文件路径,要么添加
scanForSchemas参数开启目录下所有xsd的批量扫描 - 添加
fork: false配置关闭插件的独立进程模式,避免进程间工作目录不一致导致的路径解析错误
修正后的插件配置
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-xjc-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>xjc</id> <phase>generate-sources</phase> <goals> <goal>xsdtojava</goal> </goals> <configuration> <!-- 关闭fork模式避免路径解析异常 --> <fork>false</fork> <!-- 生成代码放到标准生成源码目录,插件会自动标记为源码根 --> <sourceRoot>${project.basedir}/target/generated-sources/xjc</sourceRoot> <xsdOptions> <xsdOption> <!-- 单文件处理可写具体xsd路径:<xsd>${project.basedir}/src/main/resources/xxx.xsd</xsd> --> <xsd>${project.basedir}/src/main/resources</xsd> <packagename>com.myapp.myXmlPojo</packagename> <!-- 开启目录下所有xsd批量扫描 --> <scanForSchemas>true</scanForSchemas> </xsdOption> </xsdOptions> </configuration> </execution> </executions> </plugin>
验证方式
修改配置后执行mvn clean generate-sources,即可在target/generated-sources/xjc/com/myapp/myXmlPojo目录下看到生成的POJO文件,IDEA等IDE会自动识别该目录为源码目录,无需额外配置。
如果确实需要把生成的代码放到src/main/java目录,只需要把sourceRoot的值改为${project.basedir}/src/main/java即可,保留${project.basedir}前缀就能解决目录不存在的报错。
内容的提问来源于stack exchange,提问作者Ashish Sinha
相关产品推荐
相关产品推荐

