最后更新:2026-06-17
适用场景:Maven 编译失败、IDEA Maven 构建失败、No compiler is provided in this environment、JDK/JRE 配置错误、JAVA_HOME 指向错误、Maven Runner JRE 配置错误

使用 Maven 编译 Java 项目时,经常会遇到下面这个错误:

No compiler is provided in this environment.
Perhaps you are running on a JRE rather than a JDK?

翻译成人话就是:

当前 Maven 运行环境里没有 Java 编译器。
你可能正在使用 JRE,而不是 JDK。

这个错误和代码本身关系不大,通常是 Java 环境配置问题。Maven 官方安装文档也明确说明,运行 Maven 需要安装 JDK,并且需要设置 JAVA_HOME 指向 JDK 安装目录,或者保证 java 命令在 PATH 中可用;Maven 3.9.x 运行需要 JDK 8 或以上。(Apache Maven)

更关键的是,Maven Compiler Plugin 官方文档说明,默认情况下它会使用 运行 Maven 的那个 JDK 里的 javac 编译器。所以如果 Maven 当前用的是 JRE,或者用的是一个不完整的 Java 环境,就会出现这个错误。(Apache Maven)


一、先说结论:这个错误通常不是依赖问题

看到:

No compiler is provided in this environment.
Perhaps you are running on a JRE rather than a JDK?

先不要急着改 pom.xml 依赖,也不要先删除 .m2 仓库。

优先检查这几件事:

1. 是否安装的是 JDK,而不是 JRE
2. JAVA_HOME 是否指向 JDK 根目录
3. Path 是否包含 %JAVA_HOME%\bin
4. mvn -version 显示的 Java home 是否正确
5. IDEA Maven Runner JRE 是否选成了 JDK
6. Project SDK 和 Maven 使用的 JDK 是否一致
7. Maven 编译版本是否高于当前 JDK 版本

最常见的正确配置是:

JAVA_HOME = D:\Java\jdk-17
Path      = %JAVA_HOME%\bin
Maven Runner JRE = JDK17 或 Project JDK

错误配置经常是:

JAVA_HOME = D:\Java\jdk-17\bin
JAVA_HOME = C:\Program Files\Java\jre1.8.0_xxx
Maven Runner JRE = JRE
Maven 使用的 Java home 指向 jre 目录

二、JDK 和 JRE 有什么区别?

这个错误的核心就是 JDK 和 JRE 的区别。

简单理解:

名称作用是否包含 javac
JDKJava Development Kit,Java 开发工具包包含
JREJava Runtime Environment,Java 运行环境通常不包含
javacJava 编译器,用来编译 .java 文件JDK 中提供

Maven 编译 Java 项目时需要 javac

如果你只安装了 JRE,可能可以运行:

java -version

但不能正常编译 Java 项目,因为缺少:

javac

所以开发 Java 项目必须安装 JDK,不要只安装 JRE。


三、先执行 mvn -version 看 Maven 到底用了哪个 Java

遇到这个错误,第一条命令就是:

mvn -version

正常输出类似:

Apache Maven 3.9.x
Maven home: D:\dev\apache-maven-3.9.x
Java version: 17.0.x
Java home: D:\Java\jdk-17

重点看:

Java version
Java home

如果输出是:

Java home: C:\Program Files\Java\jre1.8.0_xxx

或者:

Java home: D:\Java\jdk-17\jre

就很可能出问题。

理想情况应该是:

Java home: D:\Java\jdk-17

或者:

Java home: D:\Java\jdk-21

也就是完整 JDK 根目录。


四、检查 javac 是否存在

在命令行执行:

javac -version

正常输出类似:

javac 17.0.x

如果报错:

'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件。

说明当前系统找不到 Java 编译器。

继续检查:

where javac

PowerShell 建议执行:

where.exe javac

正常应该输出:

D:\Java\jdk-17\bin\javac.exe

如果找不到,说明:

1. 没安装 JDK
2. JAVA_HOME 配置错了
3. Path 没有配置 %JAVA_HOME%\bin
4. 当前命令行没有重新打开

这个问题可以先看这篇:

javac不是内部或外部命令怎么解决?JDK、JAVA_HOME和Path完整排查


五、检查 JAVA_HOME 是否指向 JDK 根目录

Windows CMD:

echo %JAVA_HOME%

PowerShell:

echo $env:JAVA_HOME

正确示例:

D:\Java\jdk-17

错误示例:

D:\Java\jdk-17\bin
C:\Program Files\Java\jre1.8.0_xxx

JAVA_HOME 应该指向 JDK 根目录,不是 bin 目录。

正确:

JAVA_HOME=D:\Java\jdk-17

Path 中再添加:

%JAVA_HOME%\bin

不要写成:

JAVA_HOME=D:\Java\jdk-17\bin

否则有些工具会拼出错误路径:

D:\Java\jdk-17\bin\bin

Windows 配置 JDK 和 JAVA_HOME 可以看:

Windows安装JDK 8 / 17 / 21 / 25完整教程:JAVA_HOME环境变量配置与验证


六、检查 Path 是否包含 JDK 的 bin 目录

系统要能找到 javac.exe,Path 里需要包含:

%JAVA_HOME%\bin

推荐配置:

JAVA_HOME = D:\Java\jdk-17
Path      = %JAVA_HOME%\bin

不推荐在 Path 里堆很多 Java 路径:

C:\Program Files\Common Files\Oracle\Java\javapath
C:\Program Files\Java\jdk1.8.0_xxx\bin
D:\Java\jdk-17\bin
D:\Java\jdk-21\bin

多个 Java 路径混在一起,容易出现:

java 用的是 JDK8
javac 用的是 JDK17
Maven 用的是 JRE
IDEA 用的是另一个 JDK

最稳的做法是:

Path 里只保留 %JAVA_HOME%\bin
切换 JDK 时只修改 JAVA_HOME

如果配置后 java -version 仍然显示旧版本,可以看:

Windows配置JAVA_HOME后不生效怎么办?java -version显示旧版本解决办法


七、修改环境变量后要重新打开命令行

修改 Windows 环境变量后,已经打开的 CMD、PowerShell、Windows Terminal、IDEA Terminal 不一定立即生效。

正确做法:

1. 关闭所有命令行窗口
2. 重新打开 CMD 或 PowerShell
3. 执行 java -version
4. 执行 javac -version
5. 执行 mvn -version

如果你是在 IDEA 的 Terminal 中执行 Maven,也建议:

重启 IDEA
或者关闭并重新打开 IDEA Terminal

很多人环境变量其实已经改对了,只是还在旧窗口里测试,所以看起来“不生效”。


八、IDEA 中 Maven Runner JRE 选错最常见

命令行 Maven 正常,不代表 IDEA 里的 Maven 正常。

IntelliJ IDEA 有单独的 Maven Runner JRE 设置。

检查路径:

File > Settings > Build, Execution, Deployment > Build Tools > Maven > Runner

macOS:

IntelliJ IDEA > Settings > Build, Execution, Deployment > Build Tools > Maven > Runner

找到:

JRE

建议选择:

Project JDK

或者直接选择项目需要的 JDK:

JDK17
JDK21

不要选择:

JRE

也不要选择你不确定的旧 Java 版本。

IDEA 配置 JDK 可以看:

IDEA下载JDK很慢怎么办?手动配置本地JDK完整教程


九、IDEA 里还要检查 Project SDK 和 Module SDK

除了 Maven Runner JRE,还要检查:

File > Project Structure > Project > Project SDK

以及:

File > Project Structure > Modules > Dependencies > Module SDK

推荐:

Project SDK = 项目需要的 JDK
Module SDK = Project SDK
Maven Runner JRE = Project JDK

例如项目使用 JDK17:

Project SDK = JDK17
Module SDK = Project SDK
Maven Runner JRE = Project JDK 或 JDK17

如果 Project SDK 是 JDK17,但 Maven Runner JRE 是 JRE8,Maven 构建仍然可能失败。


十、Eclipse 中也可能使用了 JRE

如果你使用 Eclipse,问题通常出在 Installed JREs 或 Maven 配置中。

检查:

Window > Preferences > Java > Installed JREs

确认里面配置的是 JDK,而不是 JRE。

例如应该是:

C:\Program Files\Java\jdk-17

不应该是:

C:\Program Files\Java\jre1.8.0_xxx

Maven 项目还要检查 Eclipse 的 Maven 配置,以及项目的 Java Build Path。


十一、Maven 编译版本不能高于当前 JDK

有时 Maven 确实使用了 JDK,但版本太低。

例如 pom.xml 写了:

<properties>
    <maven.compiler.release>17</maven.compiler.release>
</properties>

但执行:

mvn -version

显示:

Java version: 1.8.0_xxx

这时就会报其他编译错误,例如:

invalid source release: 17

或者编译失败。

JDK9 开始,javac 支持 --release 参数,Maven Compiler Plugin 官方文档也推荐通过 maven.compiler.release 指定目标 Java 版本;它会按照指定 Java SE 版本的语言规则、目标 class 文件版本和公开 API 进行编译。(Apache Maven)

JDK17 项目推荐:

<properties>
    <maven.compiler.release>17</maven.compiler.release>
</properties>

JDK21 项目推荐:

<properties>
    <maven.compiler.release>21</maven.compiler.release>
</properties>

但前提是:

运行 Maven 的 JDK 版本要足够高

例如要编译 release 17,Maven 至少要运行在 JDK17 或更高版本上。


十二、source / target 和 release 怎么选?

老项目常见写法:

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>

JDK9 以后更推荐:

<properties>
    <maven.compiler.release>8</maven.compiler.release>
</properties>

或者:

<properties>
    <maven.compiler.release>17</maven.compiler.release>
</properties>

简单理解:

配置作用
source指定源码语法版本
target指定生成的 class 文件版本
release同时限制语法、class 文件版本和目标平台 API

Maven Compiler Plugin 文档说明,--release 不只是设置目标 class 文件版本,还会让编译按照指定 Java SE 版本的公开 API 进行检查,这比单纯设置 sourcetarget 更稳。(Apache Maven)


十三、Spring Boot 项目也要看 JDK

Spring Boot 项目经常在 Maven 构建时遇到:

No compiler is provided in this environment
invalid source release: 17
Unsupported class file major version 65

这些问题本质都是:

项目要求的 JDK
Maven 当前使用的 JDK
IDEA 当前使用的 JDK

三者不一致。

排查顺序:

1. java -version
2. javac -version
3. mvn -version
4. IDEA Project SDK
5. IDEA Maven Runner JRE
6. pom.xml 中的 maven.compiler.release
7. Spring Boot 版本要求

如果你遇到 Unsupported class file major version,可以看:

Java版本号与class文件major version对照表:Unsupported class file major version 52 / 55 / 61 / 65 / 69 / 70


十四、Maven Toolchains 是什么?

有些团队会使用 Maven Toolchains,让 Maven 本身运行在一个 JDK 上,但编译项目时使用另一个 JDK。

这适合复杂项目或多 JDK 构建场景。

普通个人项目一般不需要先上 Toolchains,先把下面几项统一就够了:

JAVA_HOME
Path
mvn -version
IDEA Maven Runner JRE
pom.xml 编译版本

如果项目里已经用了 maven-toolchains-plugin,那还要检查:

~/.m2/toolchains.xml

看里面配置的 JDK 路径是否存在、版本是否正确。


十五、Maven 下载依赖失败不是这个问题

No compiler is provided in this environment 是编译器问题,不是依赖下载问题。

如果报错是:

Could not transfer artifact
Could not resolve dependencies
Transfer failed
Read timed out
Connection timed out

那应该排查 Maven 镜像、网络、本地仓库、代理等问题。

可以看:

Maven Could not transfer artifact 下载失败解决:settings.xml、国内镜像、本地缓存与代理排查

Maven 国内镜像配置可以看:

Maven国内镜像settings.xml配置大全:阿里云、腾讯云、华为云、清华源


十六、完整排查流程

遇到:

No compiler is provided in this environment.
Perhaps you are running on a JRE rather than a JDK?

按下面顺序排查:

1. 确认安装的是 JDK,不是 JRE
2. 确认 JDK 目录下有 bin\javac.exe
3. 执行 java -version
4. 执行 javac -version
5. 执行 mvn -version
6. 检查 mvn -version 中的 Java home
7. 检查 JAVA_HOME 是否指向 JDK 根目录
8. 检查 Path 是否包含 %JAVA_HOME%\bin
9. 检查 Path 中旧 Java 路径是否排在前面
10. 重新打开命令行
11. 检查 IDEA Project SDK
12. 检查 IDEA Maven Runner JRE
13. 检查 Module SDK
14. 检查 pom.xml 中的 maven.compiler.release
15. 确认当前 JDK 版本不低于项目编译版本

PowerShell 命令:

java -version
javac -version
mvn -version
echo $env:JAVA_HOME
where.exe java
where.exe javac

CMD 命令:

java -version
javac -version
mvn -version
echo %JAVA_HOME%
where java
where javac

十七、推荐修复方案一:Windows 命令行 Maven

适用于命令行执行:

mvn clean package

报错的情况。

推荐配置:

JDK目录:
D:\Java\jdk-17

JAVA_HOME:
D:\Java\jdk-17

Path:
%JAVA_HOME%\bin

然后重新打开 CMD,执行:

java -version
javac -version
mvn -version

确认:

Java home: D:\Java\jdk-17

再执行:

mvn clean package

十八、推荐修复方案二:IDEA Maven

适用于 IDEA 中点击 Maven 的:

clean
package
install

时报错。

检查:

File > Project Structure > Project > Project SDK

设置为:

JDK17

然后检查:

Settings > Build Tools > Maven > Runner > JRE

设置为:

Project JDK

或者:

JDK17

然后点击:

Reload All Maven Projects

再执行:

mvn clean package

十九、推荐修复方案三:项目要求 JDK17,但本机是 JDK8

如果 pom.xml 写了:

<properties>
    <maven.compiler.release>17</maven.compiler.release>
</properties>

而你执行:

mvn -version

显示:

Java version: 1.8.0_xxx

那就不要试图让 JDK8 编译 JDK17 项目。

正确做法是:

1. 安装 JDK17 或更高版本
2. JAVA_HOME 指向 JDK17
3. Path 指向 %JAVA_HOME%\bin
4. IDEA Maven Runner JRE 选 JDK17
5. 重新构建

JDK 下载地址可以看:

各版本JDK镜像下载地址:JDK8 / JDK11 / JDK17 / JDK21 / JDK25 / JDK26 下载与IDEA配置指南


二十、推荐修复方案四:只安装了 JRE

如果你发现:

C:\Program Files\Java\jre1.8.0_xxx

或者 JDK 目录下没有:

bin\javac.exe

那就是 Java 开发环境不完整。

解决:

1. 卸载或忽略 JRE
2. 安装完整 JDK
3. JAVA_HOME 指向 JDK 根目录
4. Path 添加 %JAVA_HOME%\bin
5. 重新打开命令行

验证:

javac -version
mvn -version

二十一、常见问题 FAQ

1. No compiler is provided in this environment 是什么意思?

意思是 Maven 当前运行环境里没有 Java 编译器,通常是因为 Maven 使用了 JRE,而不是 JDK。


2. 为什么 java -version 正常,Maven 还是报没有 compiler?

因为 java -version 只能说明系统能运行 Java,不代表 Maven 当前使用的是完整 JDK。

还要看:

mvn -version

里面的:

Java home

以及:

javac -version

3. JRE 能运行 Maven 吗?

有些情况下可以启动 Maven,但编译 Java 源码时会失败,因为缺少 javac

开发 Java 项目应该使用 JDK。


4. IDEA 中怎么解决这个错误?

重点检查:

Project SDK
Module SDK
Maven Runner JRE

尤其是:

Settings > Build Tools > Maven > Runner > JRE

不要选 JRE,选择 Project JDK 或具体 JDK。


5. Maven 使用哪个 JDK 怎么看?

执行:

mvn -version

看输出中的:

Java version
Java home

6. JAVA_HOME 要配置到 bin 目录吗?

不要。

正确:

JAVA_HOME=D:\Java\jdk-17

Path 中添加:

%JAVA_HOME%\bin

7. No compiler 和 Could not transfer artifact 是同一个问题吗?

不是。

No compiler is provided 是编译器问题。

Could not transfer artifact 是依赖下载问题。


8. 配置了 JDK17,为什么还提示 invalid source release: 17?

执行:

mvn -version

如果 Maven 仍然显示 JDK8,说明 Maven 没有使用你配置的 JDK17。


9. 需要配置 CLASSPATH 吗?

普通 Maven 项目不需要手动配置全局 CLASSPATH

优先配置好:

JAVA_HOME
Path
Maven Runner JRE
pom.xml 编译版本

10. 删除 .m2 仓库能解决吗?

通常不能。

这个错误是 Maven 找不到编译器,删除 .m2/repository 主要解决依赖缓存问题,不解决 JDK/JRE 配置错误。


二十二、最终总结

No compiler is provided in this environment 的核心原因通常是:

Maven 当前没有使用完整 JDK

记住这几个规则:

开发 Java 项目要安装 JDK,不是 JRE
JDK 里才有 javac 编译器
JAVA_HOME 指向 JDK 根目录
Path 添加 %JAVA_HOME%\bin
mvn -version 要显示正确的 Java home
IDEA Maven Runner JRE 要选择 Project JDK 或具体 JDK
pom.xml 的编译版本不能高于当前 Maven 使用的 JDK

最推荐的配置:

JAVA_HOME=D:\Java\jdk-17
Path=%JAVA_HOME%\bin
Maven Runner JRE=Project JDK

验证:

java -version
javac -version
mvn -version

只要这三条命令里的 JDK 版本和路径都一致,大多数 Maven compiler 问题都能解决。


二十三、相关文章

JDK 下载地址可以看:

各版本JDK镜像下载地址:JDK8 / JDK11 / JDK17 / JDK21 / JDK25 / JDK26 下载与IDEA配置指南

Windows 安装 JDK 可以看:

Windows安装JDK 8 / 17 / 21 / 25完整教程:JAVA_HOME环境变量配置与验证

如果 JAVA_HOME 配置后不生效,可以看:

Windows配置JAVA_HOME后不生效怎么办?java -version显示旧版本解决办法

如果 javac 找不到,可以看:

javac不是内部或外部命令怎么解决?JDK、JAVA_HOME和Path完整排查

IDEA 配置 JDK 可以看:

IDEA下载JDK很慢怎么办?手动配置本地JDK完整教程

Maven 下载依赖失败可以看:

Maven Could not transfer artifact 下载失败解决:settings.xml、国内镜像、本地缓存与代理排查

Maven 国内镜像配置可以看:

Maven国内镜像settings.xml配置大全:阿里云、腾讯云、华为云、清华源

完整 Java 环境配置可以看:

Java开发环境配置专题:JDK、IDEA、Maven、Gradle、版本兼容与常见报错


更新记录

2026-06-17:
- 创建 No compiler is provided in this environment 完整排查教程
- 增加 JDK 与 JRE 区别说明
- 增加 mvn -version、javac -version、JAVA_HOME、Path 检查方法
- 增加 IDEA Maven Runner JRE 排查
- 增加 Maven 编译版本 release / source / target 配置说明
- 增加命令行 Maven、IDEA Maven、只安装 JRE 等常见场景修复方案