Spring Boot项目Maven编译报错无法找到Java基础类问题
Spring Boot项目执行Maven命令报错:编译器无法找到JDK内置基础类
问题表现
Windows 10环境下,系统PATH已正确配置Java,执行任意Maven命令时突发编译失败,编译器无法识别List、Map、String等JDK内置基础类,同时伴随栈溢出错误。
环境校验输出
$ java -version openjdk version "1.8.0_312" OpenJDK Runtime Environment (build 1.8.0_312-b07) OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode) $ which java /c/Program Files/OpenJDK/openjdk-8u312-b07/bin/java
执行mvn clean package报错片段
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ APP_NAME --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 55 source files to C:\Users\francisco.souza\Projetos\Java\2022\APP_NAME\target\classes The system is out of resources. Consult the following stack trace for details. java.lang.StackOverflowError at com.sun.tools.javac.comp.Resolve.isAccessible(Resolve.java:299) ... [INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /C:/Users/francisco.souza/Projetos/Java/2022/APP_NAME/src/main/java/br/com/dark/icc/ura/app/steps/StepDesliga.java:[33,13] cannot access Map class file for Map not found [ERROR] /C:/Users/francisco.souza/Projetos/Java/2022/APP_NAME/src/main/java/br/com/dark/icc/ura/app/steps/StepDesliga.java:[45,64] incompatible types: Map cannot be converted to java.util.Map<java.lang.String,java.lang.Object> [ERROR] /C:/Users/francisco.souza/Projetos/Java/2022/APP_NAME/src/main/java/br/com/dark/icc/ura/app/steps/StepDesliga.java:[58,48] cannot access List class file for List not found
根因说明
PATH中能正常执行java命令不代表Maven编译时使用的是完整可用的JDK:Maven编译阶段优先读取JAVA_HOME环境变量定位JDK路径,不直接复用PATH中的java命令路径。报错中的StackOverflowError是类加载失败触发的连锁异常,不是核心问题,核心原因是Maven调用的Java运行环境不完整,无法加载rt.jar中存储的JDK核心类。
修复步骤
按优先级依次排查:
- 修正JAVA_HOME配置
打开Windows系统环境变量面板,确认JAVA_HOME变量值为JDK安装根目录,即对应路径为C:\Program Files\OpenJDK\openjdk-8u312-b07,不要指向bin子目录、不要指向JRE目录,路径结尾不要加多余斜杠,不要包裹多余引号。
配置完成后新开命令行窗口,依次执行两个命令校验:echo %JAVA_HOME%,确认输出路径和上述JDK根目录一致%JAVA_HOME%\bin\javac -version,确认能正常输出javac 1.8.0_312的版本信息,证明JDK完整可用
- 校验Maven绑定的JDK版本
命令行执行mvn -v,查看输出内容中的Java version和Java home字段,确认版本为1.8.0_312、路径为上述配置的JDK路径。如果显示其他JDK/JRE版本,检查PATH环境变量,删除其他Java相关路径,避免版本冲突。 - 调高编译阶段内存配置
若修正JDK路径后仍报栈溢出错误,在项目pom.xml中调整maven-compiler-plugin的内存参数,配置示例:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <meminitial>512m</meminitial> <maxmem>1024m</maxmem> </configuration> </plugin> - 清理缓存重试
关闭所有打开的IDE、终端窗口,删除项目下的target目录,执行mvn clean compile重新触发编译即可。如果是在IDE内置终端执行命令,需要同步确认IDE的项目SDK、Maven运行时JRE配置均指向同一份1.8版本JDK,不要使用IDE内置的JRE环境。
内容的提问来源于stack exchange,提问作者Francisco Souza
相关产品推荐
相关产品推荐

