JDK17执行mvn clean install因Java Doclet报错求助
问题原因分析
这个错误的核心原因是:
- JDK模块化变更:
com.sun.tools.doclets.standard.Standard在Java 9及以上版本中被迁移到jdk.javadoc模块,且不再以公开的com.sun.tools.doclets.standard包形式提供。Java 17下直接尝试加载这个类会触发ClassNotFoundException。 - 插件/依赖兼容性问题:你当前使用的
maven-javadoc-plugin:3.4.0和spring-auto-restdocs-json-doclet-jdk9:2.0.11版本对Java 17的支持不足,即便指定了自定义Doclet,内部逻辑仍会尝试加载已被移除的标准Doclet类。
解决方案
按以下步骤逐一调整:
1. 升级maven-javadoc-plugin版本
将插件版本升级到3.6.0及以上,该版本开始全面兼容Java 17,修复了模块化环境下Doclet加载的问题:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <!-- 升级到兼容Java17的版本 --> <version>3.6.2</version> <extensions>true</extensions> <executions> <execution> <id>generate-javadoc-json</id> <phase>compile</phase> <goals> <goal>javadoc-no-fork</goal> </goals> </execution> </executions> <!-- 其余配置保留 --> </plugin>
2. 升级Spring Auto RestDocs Doclet版本
spring-auto-restdocs-json-doclet-jdk9:2.0.11发布于2021年,对Java 17的支持有限,建议升级到2.2.0及以上版本(该版本明确支持Java 17):
<docletArtifact> <groupId>capital.scalable</groupId> <!-- 高版本已统一artifactId,不再区分jdk9后缀 --> <artifactId>spring-auto-restdocs-json-doclet</artifactId> <version>2.2.0</version> </docletArtifact>
3. 添加Javadoc模块依赖配置(可选)
如果升级后仍有问题,在插件的configuration中添加additionalJOptions,显式引入jdk.javadoc模块:
<configuration> <!-- 原有配置 --> <additionalJOptions> <additionalJOption>--add-modules</additionalJOption> <additionalJOption>jdk.javadoc</additionalJOption> </additionalJOptions> </configuration>
验证调整
执行mvn clean install前,先清理本地仓库缓存避免依赖冲突:
mvn clean install -U
内容的提问来源于stack exchange,提问作者Coding_Rabbit
相关产品推荐
相关产品推荐

