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

本文详细解释了在MacOS上配置JAVA_HOME的重要性,尤其是在Maven环境中。指南涵盖了如何验证JAVA_HOME路径、区分JDK和JRE、解决因JRE导致的编译问题,以及使用/usr/libexec/java_home动态设置JAVA_HOME。
摘要由CSDN通过智能技术生成

(以下操作全部在Mac OS系统上进行)

  1. JAVA_HOME问题
    安装Maven后,我们必须设置JAVA_HOME环境变量,这样工具就知道在哪里可以找到要执行的JDK命令。Maven 目标针对项目的源代码运行适当的 Java 命令。
    例如,最常见的场景是通过执行javac命令来编译代码。
    如果JAVA_HOME未指向有效的 JDK 安装,Maven 将在每次执行时抛出错误。
# Output... 
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK, not a JRE
  1. Maven如何验证JAVA_HOME路径
    在运行任何目标之前,Maven 会检查JAVA_HOME指定的路径中是否存在java命令,或者通过向操作系统询问默认的 JDK 安装。 如果未找到可执行文件,Maven 将因错误而终止。
    这是Linux (Apache Maven v3.5.4)的mvn可执行文件检查:
if [ -z "$JAVA_HOME" ] ; then
    JAVACMD=`which java`
else
    JAVACMD="$JAVA_HOME/bin/java"
fi
 
if [ ! -x "$JAVACMD" ] ; then
    echo "The JAVA_HOME environment variable is not defined correctly" >&2
    echo "This environment variable is needed to run this program" >&2
    echo "NB: JAVA_HOME should point to a JDK not a JRE" >&2
    exit 1
fi

这种检查乍一看似乎很合理,但我们必须考虑到JDK 和 JRE 都有一个bin文件夹,并且都包含一个可执行的java文件。
因此,可以将JAVA_HOME配置为指向 JRE 安装,隐藏此特定错误并在稍后阶段引起问题。 虽然 JRE 的主要目的是运行 Java 代码,但 JDK 也可以编译和调试 其他重要差异。
出于这个原因, mvn compile 命令会失败——我们将在下一小节中看到。

  1. 由于JRE而不是JDK导致编译失败
    与通常的默认设置一样,如果我们有“标准”配置,它们将非常有用。
    例如,如果我们在 Ubuntu 18.04 系统上安装 Java 11 并且不设置JAVA_HOME环境变量,Maven 仍然会很顺利地找到我们的 JDK 并将其用于不同的目标,包括编译。
  2. 检查JAVA_HOME配置
    只需打开一个终端并输入:
$JAVA_HOME/bin/javac -version

如果JAVA_HOME指向 JDK,则输出应如下所示:

javac 1.X.0_XX

如果 JAVA_HOME不指向 JDK,操作系统将抛出错误消息:

bash: /bin/javac: No such file or directory
  1. 如何解决问题
    从 OS X 10.5 开始,Apple 引入了一个命令行工具( /usr/libexec/java_home ),它可以为当前用户动态查找 Java 首选项中指定的顶级 Java 版本。
    在任何文本编辑器中打开~/.bash_profile并添加:
export JAVA_HOME=$(/usr/libexec/java_home)

保存并关闭文件。
打开终端并运行 source 命令以应用更改:

source ~/.bash_profile

现在我们可以检查JAVA_HOME变量的值:

echo $JAVA_HOME

结果应该是JDK安装的路径:

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

现在我们找到了jdk的目录,下面设置环境变量就好了。
在任何文本编辑器中打开 ~ /.bashrc并添加:

export JAVA_HOME=/path/to/java_installation

保存并关闭文件。
运行 source 命令加载变量:

source ~/.bashrc

现在我们可以检查JAVA_HOME变量的值:

echo $JAVA_HOME

结果应该是JDK安装的路径:

/usr/lib/jvm/java-8-oracle
  1. 以上就可以解决这个问题。

参考: https://www.baeldung.com/maven-java-home-jdk-jre

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值