Maven执行verify命令报错:无法找到javadoc命令
这问题确实有点反直觉——明明mvn javadoc:jar能正常跑,JAVA_HOME也配置对了,偏偏mvn verify就报找不到javadoc命令。我来帮你梳理几个可能的原因和对应的解决思路:
检查Maven运行时的环境变量是否正确
有时候终端里的JAVA_HOME是对的,但如果是在IDE(比如IntelliJ IDEA、Eclipse)里执行verify,IDE可能没继承系统的环境变量。你可以先在终端里执行mvn verify -Dprintenv,查看输出里的JAVA_HOME是否和你执行echo $JAVA_HOME的结果一致。如果不一致:- 对于IntelliJ:打开
Settings→Build, Execution, Deployment→Build Tools→Maven→Runner,在JRE选项里选择你配置的JDK(也就是/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home对应的JDK)。 - 对于Eclipse:打开
Preferences→Java→Installed JREs,确保选中的是正确的JDK,然后在Maven→Installations里确认Maven使用的JRE和它一致。
- 对于IntelliJ:打开
显式指定Javadoc插件的兼容版本
你用的是JDK 9,而Maven默认的Javadoc插件版本可能对JDK 9的支持不够完善。单独执行javadoc:jar时可能用的是你本地配置的插件版本,但verify阶段调用的是项目默认的旧版本。可以在pom.xml里显式指定兼容JDK 9的插件版本,比如:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.6.3</version> <!-- 这个版本完美支持JDK 9+ --> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build>这样能保证
verify阶段和单独执行javadoc:jar时使用同一个兼容的插件版本。强制指定Javadoc命令的路径
如果环境变量的问题还是没解决,可以直接在插件配置里指定javadoc的绝对路径,让插件跳过环境变量查找,直接用JDK自带的命令:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.6.3</version> <configuration> <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable> </configuration> </plugin>${java.home}会自动指向当前Maven使用的JDK路径,这样就不会出现找不到命令的问题了。检查终端环境变量的全局生效
如果你是在终端执行命令,确保JAVA_HOME的配置在所有shell环境中都生效。比如用zsh的话,要把export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home和export PATH=$JAVA_HOME/bin:$PATH加到~/.zshrc里,而不是只放在~/.bash_profile。修改后重启终端,再执行which javadoc,确认输出是$JAVA_HOME/bin/javadoc,而不是其他路径。
内容的提问来源于stack exchange,提问作者amone

