如何在Ubuntu中通过脚本自动配置JAVA_HOME与M2_HOME环境变量
解决Ubuntu 22.04中自动配置JAVA_HOME和M2_HOME的问题
问题分析
你当前脚本的核心问题是环境变量路径配置错误,以及临时export无法持久化:
- 通过snap安装的OpenJDK,你指定的
/var/snap/openjdk/current/openjdk.env是配置文件而非JDK根目录,正确路径是/var/snap/openjdk/current - 用apt安装的Maven,
/usr/bin/maven是执行脚本的路径,M2_HOME应该指向Maven的安装根目录/usr/share/maven - 脚本中直接追加到
~/.bashrc会导致重复写入,建议先判断变量是否已存在再添加
修正后的完整脚本
#!/bin/bash OC_VERSION="4.5.0-0.okd-2020-07-14-153706-ga" OC_TAR_NAME="openshift-client-linux-4.5.0-0.okd-2020-07-14-153706-ga.tar.gz" echo "Installing Tools..." sudo apt-get update -y sudo apt-get remove openjdk-11-jre-headless -y sudo apt-get update -y echo "Installing java..." sudo snap install openjdk # 临时设置当前脚本执行环境的JAVA_HOME,仅对本次脚本运行有效 export JAVA_HOME=/var/snap/openjdk/current export PATH=$JAVA_HOME/bin:$PATH echo "Installing maven..." sudo apt-get install maven -y # 临时设置当前脚本执行环境的M2_HOME export M2_HOME=/usr/share/maven export PATH=$M2_HOME/bin:$PATH echo "Installing helm..." sudo snap install helm --classic echo "Installing kubelogin..." sudo snap install kubelogin echo "Installing kubectl..." sudo snap install kubectl --classic echo "Installing powershell..." sudo snap install powershell --classic echo -e "Installing git..." sudo snap install git-ubuntu --classic echo -e "Installing postgresql..." sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update sudo apt-get -y install postgresql echo -e "Downloading openshift-client..." sudo wget https://github.com/openshift/okd/releases/download/4.5.0-0.okd-2020-07-14-153706-ga/${OC_TAR_NAME} echo -e "Extracting openshift-client..." sudo tar -zxvf ${OC_TAR_NAME} -C /usr/local/bin # Remove downloaded tar files sudo rm -f ${OC_TAR_NAME} # 持久化配置环境变量到~/.bashrc,避免重复写入 if ! grep -q "export JAVA_HOME=/var/snap/openjdk/current" ~/.bashrc; then echo 'export JAVA_HOME=/var/snap/openjdk/current' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc fi if ! grep -q "export M2_HOME=/usr/share/maven" ~/.bashrc; then echo 'export M2_HOME=/usr/share/maven' >> ~/.bashrc echo 'export PATH=$M2_HOME/bin:$PATH' >> ~/.bashrc fi # 让当前脚本生效(仅对当前脚本子shell有效,新终端需重新登录或手动source ~/.bashrc) source ~/.bashrc echo "环境变量配置完成,新终端登录后生效!"
关键修正点说明
- JAVA_HOME路径修正:snap安装的OpenJDK根目录是
/var/snap/openjdk/current,该目录下包含完整的JDK文件结构(bin、lib等) - M2_HOME路径修正:apt安装的Maven默认根目录为
/usr/share/maven,/usr/bin/mvn只是指向该目录下的执行脚本 - 避免重复写入:用
grep -q判断变量是否已存在于.bashrc,防止多次执行脚本时重复追加配置 - 临时+持久化结合:脚本中临时
export保证安装过程中工具能调用到Java/Maven,写入.bashrc保证后续登录会话生效
验证方法
执行完脚本后,新开一个终端窗口,运行以下命令验证:
echo $JAVA_HOME echo $M2_HOME mvn -v java -version
如果输出正确的路径和版本信息,说明配置成功。
内容的提问来源于stack exchange,提问作者Kalyana Srinivas
相关产品推荐
相关产品推荐

