Mac M1下使用sudo执行Java/Maven命令报错求助
问题原因与解决思路
原因分析
sudo执行命令时会默认重置部分环境变量(核心是PATH),尽管你用sudo echo $JAVA_HOME能拿到正确路径,但这是因为$JAVA_HOME是当前用户解析后传给sudo的,并非sudo环境本身加载的变量。实际sudo的PATH中并没有包含$JAVA_HOME/bin目录,所以系统找不到java、mvn这类可执行文件。
解决方法
- 临时应急方案:直接指定Java的完整路径执行命令
sudo $JAVA_HOME/bin/java -version sudo $JAVA_HOME/bin/mvn [你的命令参数] - 继承用户环境执行:使用
sudo -E参数,让sudo保留当前用户的环境变量(包括PATH)sudo -E java -version sudo -E mvn [你的命令参数] - 全局配置PATH:把Java的bin目录添加到系统全局PATH中
编辑/etc/paths文件,添加一行:
保存后重启终端,sudo环境的PATH就会包含这个路径。/Library/Java/JavaVirtualMachines/8/jdk8/zulu-8.jdk/Contents/Home/bin - 配置sudo保留环境变量:编辑sudoers文件(必须用
visudo命令,避免语法错误导致sudo失效)
执行visudo,添加或修改如下配置:
保存退出后,sudo就会保留当前用户的PATH和JAVA_HOME变量。Defaults env_keep += "PATH JAVA_HOME"
内容的提问来源于stack exchange,提问作者JcAm
相关产品推荐
相关产品推荐

