使用jaxb2:xjc生成Java文件的POM配置异常排查
解决jaxb2:xjc执行报错NoSchemasException及配置未加载问题
针对你遇到的mvn jaxb2:xjc执行报错NoSchemasException,且插件未使用配置的outputDirectory的问题,可按以下步骤排查解决:
1. 校验插件的Schema路径配置
确认jaxb2-maven-plugin的配置中,schemaDirectory指向了XSD文件所在目录(即src/main/resources或其子目录),同时通过includes指定所有XSD文件的匹配规则,避免插件找不到Schema文件:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> <version>3.2.0</version> <!-- 绑定到编译阶段,确保install时能正常执行 --> <executions> <execution> <id>xjc-generate</id> <phase>generate-sources</phase> <goals> <goal>xjc</goal> </goals> </execution> </executions> <configuration> <!-- 指定XSD文件所在目录 --> <schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory> <!-- 匹配所有子目录下的XSD文件 --> <includes> <include>**/*.xsd</include> </includes> <!-- 配置生成文件的输出目录 --> <outputDirectory>${project.basedir}/src/main/java</outputDirectory> <!-- 可选:开启生成目录的清理 --> <clearOutputDir>true</clearOutputDir> </configuration> </plugin> </plugins> </build>
2. 确保在正确的目录执行命令
如果是多模块项目,必须进入common子模块的根目录执行mvn jaxb2:xjc;若在父项目目录执行,需通过-pl参数指定子模块:
# 在父项目目录执行时指定common子模块 mvn -pl common jaxb2:xjc
3. 验证插件配置是否被正确加载
在common子模块目录下执行以下命令,查看插件的实际生效配置,确认schemaDirectory和outputDirectory是否与pom.xml中的配置一致:
mvn help:describe -Dplugin=jaxb2 -Ddetail
如果输出的参数值与pom配置不符,说明当前命令没有加载到common子模块的pom.xml,需检查执行目录是否正确,或pom.xml是否存在语法错误。
4. 清理缓存后重新执行
执行mvn clean jaxb2:xjc,先清理之前的生成文件和Maven缓存,避免缓存导致的配置不生效问题。
内容的提问来源于stack exchange,提问作者Donald F. Coffin
相关产品推荐
相关产品推荐

