
maven打包jar时提示没有找到javac但是cmd里面java和javac都有输出,并且mvn-v指向jre导致打包失败

上午好☀️☀️☀️️
本答案参考通义千问
你遇到的问题是:Maven 打包时提示找不到 javac,而 java 和 javac 在命令行中都可以正常运行。但当你执行 mvn -v 时,发现 Maven 的 Runtime 指向的是 JRE 而不是 JDK,这会导致 Maven 无法找到编译所需的 javac,从而打包失败。
javac 编译器,因此 Maven 在尝试编译源码时会报错:“找不到 javac”。java 和 javac 都有输出,但这些可能是在另一个环境变量配置中生效的,而 Maven 可能使用了系统默认的或某个特定配置的 Java 环境。在命令行中执行以下命令,查看 Maven 使用的 Java 环境:
mvn -v
输出示例:
Apache Maven 3.8.6 (...)
Java version: 1.8.0_291, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jre1.8.0_291
如果 runtime 显示的是 jre 而不是 jdk,说明 Maven 正在使用 JRE。
JAVA_HOME 环境变量指向 JDK 安装目录Windows 系统:
C:\Program Files\Java\jdk1.8.0_291JAVA_HOME 指向该路径%JAVA_HOME%\bin 添加到 PATH 环境变量中Linux/macOS 系统:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
注意: 请确保
JAVA_HOME指向的是 JDK 而不是 JRE。
settings.xmlMaven 有时会通过 settings.xml 文件指定 Java 路径,虽然一般情况下不需要手动配置,但你可以检查一下:
%USERPROFILE%\.m2\settings.xml 或 ~/.m2/settings.xml<settings>
<profiles>
<profile>
<id>custom-jdk</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<java.version>1.8</java.version>
</properties>
</profile>
</profiles>
</settings>
注: 该配置只是用于指定 Java 版本,并不直接设置 JDK 路径,仍需依赖
JAVA_HOME环境变量。
echo %JAVA_HOME%
java -version
javac -version
mvn -v
确保所有输出都显示为 JDK 版本。
如果你不想更改全局环境变量,可以在运行 Maven 前临时设置 JAVA_HOME,例如:
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_291
mvn clean package
注意: 这种方式只对当前命令行会话有效。
| 步骤 | 内容 |
|------|------|
| 1 | 检查 mvn -v 输出,确认是否使用 JRE |
| 2 | 设置 JAVA_HOME 指向 JDK 安装路径 |
| 3 | 更新 PATH 环境变量,确保 JDK 的 bin 目录在前 |
| 4 | 重启命令行并验证配置 |
| 5 | (可选)临时设置 JAVA_HOME 执行 Maven 命令 |
where java / where javac 查看路径:帮助排查环境变量冲突。如需进一步帮助,请提供以下信息:
mvn -v 的完整输出echo %JAVA_HOME% 的输出where java 和 where javac 的输出我可以帮你更精准地定位问题!