资讯动态

Ubuntu 20.04 JDK安装配置全攻略:apt、手动与SDKMAN方案详解

发布时间:2026/8/13 5:05:12 来源:尧图企业网站定制
1. 项目概述为什么在Ubuntu上配置JDK是开发者的必修课如果你是一名Java开发者或者正准备踏入后端、大数据、安卓开发等领域那么“在Linux系统上配置Java开发环境”几乎是你的第一道门槛。Ubuntu 20.04 LTS作为一个长期支持版本以其稳定性和广泛的社区支持成为了众多开发者和服务器环境的首选。而JDKJava Development Kit作为Java程序运行的基石其安装与配置的顺畅与否直接决定了你后续的开发体验是“一路绿灯”还是“步步踩坑”。我见过太多新手包括几年前的我自己在sudo apt install default-jdk之后就以为万事大吉结果在运行java -version时发现版本不对或者在IDE中配置SDK时找不到路径又或者构建工具如Maven、Gradle因为JAVA_HOME环境变量没设而报错。这些问题看似简单但背后涉及的是对Linux包管理、环境变量作用域以及Java版本管理的理解。今天我就以Ubuntu 20.04为例带你彻底搞懂JDK安装的几种主流方式、它们之间的优劣以及如何进行一次“教科书级”的配置确保你的开发环境干净、可控且易于维护。无论你是刚接触Linux的小白还是想优化现有工作流的老手这篇详尽的指南都能让你有所收获。2. 核心方案选型apt安装、手动解压与SDKMAN的深度对比在Ubuntu上安装JDK远不止一条路。选择哪种方式取决于你的具体需求是追求极致的简便还是需要灵活的版本切换或是要求特定的JDK发行版。下面我们来拆解三种最常用的方案。2.1 方案一使用apt包管理器安装适合新手及快速部署这是最直接的方法。Ubuntu的官方软件仓库包含OpenJDK的包。操作与原理更新软件包列表首先执行sudo apt update。这个命令并不会更新任何已安装的软件而是刷新本地软件包索引从配置的软件源服务器获取最新的软件包列表及其版本信息。这是确保你能安装到最新可用版本的关键第一步。安装JDK执行sudo apt install default-jdk。这里安装的default-jdk是一个元数据包它会自动指向当前Ubuntu版本推荐的最新稳定版OpenJDK。例如在Ubuntu 20.04上它通常会安装OpenJDK 11。你也可以安装特定版本如openjdk-11-jdk或openjdk-8-jdk。优点极其简单两条命令搞定无需关心下载、解压、路径。自动管理后续可以通过apt统一更新或卸载与系统其他软件包管理方式一致。集成度高安装后java和javac命令通常已自动添加到系统路径。缺点与注意事项版本受限仓库中的版本可能不是最新的。例如你可能需要JDK 17或21但官方仓库可能只提供到11或17。发行版单一通常只有OpenJDK如果你需要Oracle JDK、Amazon Corretto等特定发行版此方法不适用。安装路径分散通过apt安装的JDK其文件会分散在系统的多个标准目录中如/usr/lib/jvm/对于想集中管理多个JDK版本的用户来说不够直观。注意如果你需要为所有用户安装或者是在配置生产服务器且对JDK版本要求不苛刻apt安装是最稳妥、最符合Linux哲学的方式。2.2 方案二下载归档文件手动安装适合需要特定版本或发行版这是最灵活、最通用的方法适用于任何Linux发行版。你可以从各JDK提供商官网下载所需的.tar.gz归档文件。操作流程与深层逻辑选择与下载访问如 Adoptium 推荐提供高性能的Eclipse Temurin JDK、 Oracle官网 、 Amazon Corretto 等选择Linux x64的.tar.gz包。我强烈推荐Adoptium/Temurin它完全开源、免费且性能优异。规划安装目录Linux有一个约定俗成的目录/usr/lib/jvm/专门用于存放Java虚拟机。手动安装时将JDK解压到此目录下可以保持系统整洁也与其他管理工具如update-alternatives的预期一致。执行sudo mkdir -p /usr/lib/jvm创建目录如果不存在。解压与放置使用tar命令解压下载的包到目标目录。例如sudo tar -xzf jdk-21_linux-x64_bin.tar.gz -C /usr/lib/jvm/。这里的-C参数指定了解压目标目录。核心配置手动安装后系统并不知道这个新Java的存在。你需要通过设置环境变量来告诉它。优点版本与发行版完全自主可以安装任何版本、任何供应商的JDK。环境纯净独立所有文件集中在自己的目录下删除时直接移除整个目录即可不会遗留分散的文件。多版本并行管理基础为使用工具管理多个版本打下了基础。缺点步骤繁琐需要手动下载、解压、配置环境变量。更新麻烦升级新版本需要重复此过程并手动更新环境变量指向。2.3 方案三使用SDKMAN进行安装与管理适合开发者强烈推荐如果你是一名开发者需要在同一台机器上频繁切换不同项目所需的JDK版本比如老项目用JDK 8新项目用JDK 21那么SDKMAN是你的终极武器。它是一个用于管理多个软件开发工具包SDK版本的工具支持Java、Groovy、Scala等。工作原理SDKMAN本质上是一个命令行工具它维护了一个丰富的软件包仓库。当你通过它安装JDK时它会自动从镜像站点下载指定的发行版解压到它自己的管理目录~/.sdkman/candidates/java/下并自动配置当前Shell的环境变量。优点一键安装与切换命令如sdk install java 21.0.2-tem即可安装特定版本sdk use java 11.0.22-tem可快速切换当前Shell的版本。多版本无缝共存所有版本井然有序地存放在一起互不干扰。支持众多发行版可以轻松安装Temurin、Corretto、Oracle、Zulu等几乎所有主流JDK发行版。自动配置安装后即用无需手动设置JAVA_HOME和PATH。缺点需要额外安装工具需先安装SDKMAN本身。主要面向用户级默认安装到用户主目录更适合开发环境。如需配置系统级的全局JDK仍需结合其他方法。如何选择初学者/快速搭建一次性环境使用方案一apt。服务器生产环境使用稳定版OpenJDK使用**方案一apt或方案二手动**指定稳定版本。开发者工作站需要多版本切换毫不犹豫地选择方案三SDKMAN。需要特定非OpenJDK发行版如Oracle JDK使用方案二手动。接下来我将以**方案二手动安装**为例进行最详细的演示因为它涵盖了从下载、安装到配置的全流程理解了它其他方案也就触类旁通。最后我会补充SDKMAN的快速上手指南。3. 手动安装JDK 21与系统级环境变量配置全解析我们以从Adoptium下载最新的JDK 21 LTS版本为例演示手动安装的完整过程。之所以选择JDK 21因为它是最新的长期支持版本代表了未来的方向。3.1 步骤一下载与校验首先打开终端。前往下载页面你可以通过浏览器访问Adoptium网站下载但作为开发者在终端里用wget或curl直接下载更酷。我们先找到下载链接。通常Adoptium的下载链接有固定模式。使用wget下载执行以下命令。请注意实际的下载链接可能会随版本更新而变化建议去官网核对。wget https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21%2B35/OpenJDK21U-jdk_x64_linux_hotspot_21_35.tar.gz这里解释一下参数-21%2B35中的%2B是URL编码的加号代表构建号。x64_linux_hotspot指64位Linux系统HotSpot虚拟机。可选校验文件完整性对于生产环境校验下载文件的SHA256散列值是很好的习惯。你可以在下载页面找到校验和。使用sha256sum命令sha256sum OpenJDK21U-jdk_x64_linux_hotspot_21_35.tar.gz将输出的字符串与官网提供的进行比对完全一致则说明文件下载无误。3.2 步骤二解压与部署到系统目录现在我们将这个归档文件解压到系统标准的JVM目录。创建目标目录如果不存在前面提到/usr/lib/jvm是惯例位置。sudo mkdir -p /usr/lib/jvm-p参数确保如果目录不存在则创建且不会因为父目录不存在而报错。解压归档文件sudo tar -xzf OpenJDK21U-jdk_x64_linux_hotspot_21_35.tar.gz -C /usr/lib/jvm/-x解压。-z通过gzip过滤因为文件是.tar.gz格式。-f指定归档文件名。-C改变解压到的目录。这是关键确保文件不会解压到当前凌乱的目录下。验证解压结果解压后/usr/lib/jvm目录下会多出一个以JDK版本命名的文件夹例如jdk-2135。我们可以查看一下ls -lh /usr/lib/jvm/你应该能看到类似jdk-2135的目录。这个目录的完整路径就是你的JAVA安装路径记下它稍后配置环境变量需要。我们假设完整路径是/usr/lib/jvm/jdk-2135。3.3 步骤三配置全局环境变量关键步骤这是核心环节。我们需要设置两个关键环境变量JAVA_HOME和PATH。为什么是JAVA_HOME许多Java应用和工具如Tomcat, Maven, Gradle, IDE都依赖JAVA_HOME环境变量来定位Java安装位置。它指向的是JDK的根目录。为什么修改PATHPATH变量告诉系统当你在终端输入一个命令如java或javac时应该去哪些目录下寻找这个命令的可执行文件。我们需要将JDK的bin目录$JAVA_HOME/bin加入PATH这样就能在任意位置直接使用java、javac等命令。配置方法选择 在Linux中环境变量可以在不同层级设置临时生效在当前终端会话中直接export JAVA_HOME...关闭终端即失效。用户级永久生效将配置写入用户家目录的shell配置文件如~/.bashrc或~/.zshrc只对该用户生效。系统级全局生效将配置写入/etc/profile.d/目录下的脚本对所有用户生效。这里我们采用系统级全局配置因为它更通用尤其适合服务器环境。创建环境变量脚本在/etc/profile.d/目录下创建一个新的shell脚本。这个目录下的脚本会在所有用户登录时被自动加载。sudo nano /etc/profile.d/jdk21.sh我习惯用nano编辑器你也可以用vim。编写脚本内容在打开的编辑器中输入以下内容#!/bin/bash # Set JAVA_HOME to our JDK 21 installation export JAVA_HOME/usr/lib/jvm/jdk-2135 # Add JAVA_HOME/bin to PATH export PATH$JAVA_HOME/bin:$PATH重要解释export JAVA_HOME...设置JAVA_HOME变量值必须是你刚才解压的JDK目录的绝对路径。export PATH$JAVA_HOME/bin:$PATH将$JAVA_HOME/bin添加到PATH变量的最前面:是路径分隔符。放在前面意味着系统会优先使用我们手动安装的JDK命令而不是系统可能自带的旧版本。保存并退出在nano中按CtrlO写入回车确认再按CtrlX退出。使配置立即生效对于当前终端/etc/profile.d/中的脚本通常需要重新登录或启动新的Shell会话才能生效。我们可以使用source命令直接加载它source /etc/profile.d/jdk21.sh3.4 步骤四验证安装与配置现在让我们检验一切是否就绪。检查JAVA_HOMEecho $JAVA_HOME终端应该输出/usr/lib/jvm/jdk-2135。检查Java版本java -version你应该看到类似下面的输出确认是JDK 21openjdk version 21.0.2 2024-01-16 OpenJDK Runtime Environment Temurin-21.0.213 (build 21.0.213) OpenJDK 64-Bit Server VM Temurin-21.0.213 (build 21.0.213, mixed mode, sharing)检查编译器版本javac -version输出应为javac 21.0.2。能成功执行javac命令证明JDK而不仅仅是JRE已正确安装。检查PATH优先级输入which java和which javac它们应该指向/usr/lib/jvm/jdk-2135/bin/下的可执行文件而不是/usr/bin/下的其他版本。至此一个系统级的、全局生效的JDK 21就安装配置完成了。所有用户登录后都可以直接使用。4. 使用SDKMAN进行多版本JDK管理实战对于个人开发机SDKMAN提供了无与伦比的便利性。我们来快速过一遍它的使用。4.1 安装SDKMAN安装过程非常简单只需一条命令需要curl、zip、unzip等基础工具Ubuntu通常已预装curl -s https://get.sdkman.io | bash安装完成后按照终端的提示执行source $HOME/.sdkman/bin/sdkman-init.sh或者直接新开一个终端窗口。为了永久生效安装脚本通常已经将初始化命令添加到了你的~/.bashrc中。4.2 使用SDKMAN安装与管理JDK列出所有可安装的Java版本sdk list java你会看到一个非常长的列表展示了各个供应商Vendor、版本号、发行版Dist和状态。Identifier一列就是安装时需要用到的标识符。安装一个特定版本例如安装Temurin的JDK 21sdk install java 21.0.2-temSDKMAN会自动下载、解压、安装并询问你是否将其设置为默认版本。回答Y即可。查看已安装的版本sdk list java | grep installed或者更简单地sdk current java切换当前Shell使用的版本如果你安装了多个版本可以随时切换sdk use java 11.0.22-tem这个切换只对当前终端会话有效。非常适合在不同项目间切换。设置全局默认版本如果你希望新打开的终端默认使用某个版本sdk default java 21.0.2-temSDKMAN的目录所有通过SDKMAN安装的软件都位于~/.sdkman/candidates/目录下。每个工具如java的子目录里就是各个版本。环境变量JAVA_HOME会被自动设置为~/.sdkman/candidates/java/current这是一个指向当前激活版本的符号链接。5. 进阶配置、问题排查与最佳实践即使安装成功在实际开发中你仍可能遇到一些“坑”。下面是我总结的常见问题与处理技巧。5.1 配置JAVA_HOME的替代与进阶方法除了在/etc/profile.d/中设置还有一些场景化配置为特定用户设置不同版本如果系统全局是JDK 11但你的项目需要JDK 17只需将export JAVA_HOME...和export PATH...这两行写入你的~/.bashrc或~/.zshrc文件末尾。用户级的配置会覆盖系统级配置。在Shell脚本中临时指定在脚本开头显式设置JAVA_HOME可以确保脚本运行环境独立。#!/bin/bash export JAVA_HOME/path/to/your/jdk export PATH$JAVA_HOME/bin:$PATH # ... 你的脚本逻辑5.2 使用update-alternatives管理系统命令链接可选但推荐当你手动安装了多个JDK比如通过apt装了OpenJDK 11又手动装了JDK 21系统可能会有多个java命令。update-alternatives是Debian/Ubuntu系统用来管理相同功能软件如java、javac多个版本的命令。配置update-alternativessudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-2135/bin/java 1000 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-2135/bin/javac 1000--install 链接 名称 路径 优先级在系统命令目录(/usr/bin)创建一个符号链接java指向我们指定的JDK可执行文件。优先级数字越大在自动模式下被选中的可能性越高。切换版本sudo update-alternatives --config java执行后会列出所有已注册的Java版本输入编号即可切换。这提供了另一种系统级的版本切换方式与JAVA_HOME环境变量可以配合使用。5.3 常见问题排查实录问题1执行java -version显示的版本不是我刚安装的。原因PATH环境变量中旧版本Java的路径排在了新版本的前面。排查执行echo $PATH查看路径顺序。确保$JAVA_HOME/bin在靠前的位置。执行which java查看实际调用的java命令来自哪个路径。解决检查你的环境变量脚本如jdk21.sh确保PATH的修改是$JAVA_HOME/bin:$PATH新路径在前。执行source /etc/profile.d/jdk21.sh或重新打开终端。如果使用了update-alternatives用sudo update-alternatives --config java切换。问题2IDE如IntelliJ IDEA, Eclipse找不到JDK。原因IDE通常有自己独立的SDK配置不一定会读取系统的JAVA_HOME。解决在IDE的设置Settings/Preferences中找到Build, Execution, Deployment-Build Tools-Maven/Gradle检查JDK for importer是否设置正确。更重要的是在Project Structure或Preferences for New Projects中手动添加你安装的JDK路径/usr/lib/jvm/jdk-2135。IDE会自动识别bin目录和版本信息。问题3安装后javac命令找不到command not found。原因你可能只安装了JREJava Runtime Environment而不是JDK。JRE只包含运行环境没有编译器javac。排查确认你下载安装的是jdk包而不是jre包。通过apt安装时要安装default-jdk或openjdk-xx-jdk而不是default-jre。解决重新安装正确的JDK包。问题4使用SDKMAN安装时下载速度极慢或失败。原因网络连接问题或默认镜像源在国外。解决可以尝试修改SDKMAN的镜像源为国内镜像如华为云镜像。编辑~/.sdkman/etc/config文件将sdkman_roxy_url和sdkman_zip_endpoint等配置指向国内镜像地址具体地址需查询相关镜像站文档。或者在安装时使用手动下载后离线安装的方式。5.4 最佳实践与心得生产服务器优先使用LTS版本对于线上环境强烈建议使用长期支持LTS版本如JDK 11, 17, 21。它们提供更长时间的安全更新稳定性更有保障。非LTS版本如18, 19, 20仅提供6个月的支持适合开发者尝鲜。开发机使用SDKMAN这能极大提升效率。为不同的项目创建.sdkmanrc文件在项目根目录执行sdk env即可自动切换到该项目所需的JDK以及其他工具如Maven版本。明确JAVA_HOME与PATH的关系JAVA_HOME是一个“指针”告诉应用程序Java安装在哪里。PATH是一个“寻址目录”告诉系统在哪里可以找到可执行命令。两者通常需要配合设置。清理旧版本使用apt安装的JDK可以用sudo apt remove openjdk-11-jdk卸载。手动安装的直接删除/usr/lib/jvm/下对应的目录并清理环境变量配置和update-alternatives中的注册项即可。保持环境整洁。验证安装的完整性安装后除了java -version最好写一个简单的HelloWorld.java程序用javac编译再用java运行确保整个工具链是通的。最后我个人在经历了无数次环境配置后现在的标准做法是在个人笔记本上一律使用SDKMAN来管理所有JDK和JVM相关工具如Maven, Gradle, Groovy。在云服务器或Docker容器中如果需要固定版本则通过下载特定发行版的.tar.gz包手动安装并将环境变量配置写入Dockerfile或基础设施即代码IaC脚本中确保环境可重现。至于简单的apt安装除非是临时测试否则已经很少使用了因为它对版本的控制力太弱。希望这份超详细的指南能帮你构建一个坚实、灵活的Java开发基础环境。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价