我的任务是更新一个多年未接触过的 Java 程序,并且在 Centos 7 上使用最新版本的 Java OpenJDK 14.0.1.7-2 构建它时遇到了问题。当我运行命令$ make all
时开始编译 Java 程序时,我收到一条/bin/sh: javac: command not found
错误消息。
我已经编辑了.bash_profile
主目录中的文件并添加了:
export JAVA_HOME=/usr/lib/jvm/java-14-openjdk-14.0.1.7-2.rolling.el7.x86_64/bin/java
接下来:$ source .bash_profile
使更改生效并使用它进行验证echo $JAVA_HOME
,这给了我预期的输出,但仍然没有运气。
到目前为止,我只能在安装 Java OpenJDK 1.8 以及附加 javac 存储库时才能成功构建该程序。
运行alternatives --display javac
我在最后一行得到这个:
Current `best' version is /usr/lib/jvm/java-1.7.0-openjdk 1.7.0.261-2.6.22.2.el7_8.x86_64/bin/javac.
这对我来说很奇怪,因为我的系统上没有安装 Java OpenJDK V1.7
运行alternatives --display java
我在最后一行得到这个:
Current `best' version is /usr/lib/jvm/java-14-openjdk-14.0.1.7-2.rolling.el7.x86_64/bin/java.
任何关于我出错的地方的建议将不胜感激。
答案1
有几件事,我注意到在您的 JAVA_HOME 环境变量中您有实际 bin 的路径,请尝试将其更改为:
JAVA_HOME=/usr/lib/jvm/java-14-openjdk-14.0.1.7-2.rolling.el7.x86_64/
您可能还希望检查 PATH 环境变量,请使用以下命令:
find /bin/ /sbin/ /usr/sbin /usr/lib /usr/bin/ /usr/local/bin /usr/local/sbin ${HOME}/ /opt/ -type f -name 'javac' -exec dirname "{}" \;
如果找到导出 PATH=${PATH}:whatever-result-you-get-from-that 或简单地:
export PATH=${PATH}:$(find /bin/ /sbin/ /usr/sbin /usr/lib /usr/bin/ /usr/local/bin /usr/local/sbin ${HOME}/ /opt/ -type f -name 'javac' -exec dirname "{}" \;)
答案2
的替代项javac
指向您所说的当前未安装的内容,这表明最简单的答案是更新替代项,以便它指向一个 JDK是安装。这将重新指向符号链接,以便/usr/bin/javac
再次指向实际的可执行文件,并且PATH
搜索javac
将再次起作用。不需要实际的PATH
改变。
替代方案--config javac
是执行此操作的交互式方式,或者
替代方案--auto javac