如题,在执行 mvn clean install 时报错:

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

此时我才想起来,我好像没有配环境里的 JAVA_HOME 之类环境变量:

  • 添加 JAVA_HOME,值为安装目录,并添加 %JAVA_HOME%\bin 到 path 中
  • 添加 MAVEN_HOME,值为安装目录,并添加 %MAVEN_HOME%\bin 到 path 中
  • mvn -v 查看 runtime

结果 runtime 还是 jre 目录(JDK1.8 会默认安装一个 jdk1.8 一个 jre1.8)。一怒之下,将 jre 目录删除,得到一个 Error: could not open D:\Java\jre1.8.0_341\lib\amd64\jvm.cfg'` 报错,mvn 执行也报相同的错误。

很奇怪的状态,jre 已经被删除了,然后还能报这个错,说明是其他地方执行了 java 然后引用到了这个目录文件。恰好使用的是 git-bash 脚本,执行 which java 找到了 java 的执行目录 C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java,这个还是 JDK1.8 安装的内容。查看 path 参数,发现这个 jre 的目录地址在 JAVE_HOME 的前面,所以优先执行了 jre 中的 java。

从 path 中删除该目录,终于好了。最终的 runtime: D:\Java\jdk1.8.0_341\jre

注:如果此时 java 还是不能执行,可以 echo $PATH 看一下 java 的 bin 目录地址显示是否正确,如果像我一样显示为 %JAVE_HOME%/bin,这就是变量名配置错了,JAVE_HOME 不存在,应该是 JAVA_HOME`。