Maven构建含package-info.java项目的测试Javadoc报错如何解决
问题原因
这个报错和你的package-info.java写法、包名拼写没有关系,是环境和工具bug叠加导致的:
- 你使用的Eclipse Adoptium JDK 11.0.15在Windows环境下存在已知的javadoc工具缺陷:扫描类路径下的
package-info.class文件时,会错误使用Windows系统的反斜杠\拼接类全限定名,不符合JVM类名校验规则,最终把正确的类名com.mycompany.foo.bar.baz.package-info识别成了com\mycompany\foo\bar\baz\package-info,触发类文件不匹配的报错。 - 主源码Javadoc生成时不会提前扫描自身编译输出目录的class文件,所以不会触发问题;而生成测试源码Javadoc时,maven-javadoc-plugin默认会把主源码编译输出目录
target/classes加入类路径,工具扫描到该目录下提前编译好的主代码package-info.class时,就会触发上述bug。
可用解决方案
按推荐优先级排序:
- 升级构建环境的JDK版本:将JDK 11升级到11.0.16及以上的11系列补丁版本,或者升级到JDK 17 LTS版本,该路径分隔符处理bug已经在后续版本中被官方修复,不需要修改项目任何配置即可解决问题。
- 固定JDK版本无法升级时,调整maven-javadoc-plugin配置:在测试源码对应的Javadoc执行配置中,排除
target/classes路径下的package-info.class扫描,或者添加<doclint>none</doclint>配置项关闭严格的类文件校验,即可绕过该报错。 - 临时规避方案:执行构建前先运行
mvn clean清空target目录,不要在同一次构建流程中先完成主源码编译、再立刻生成测试源码Javadoc,不过该方法稳定性差,不建议作为长期方案使用。
内容的提问来源于stack exchange,提问作者Jason Thompson
相关产品推荐
相关产品推荐

