如何在Ubuntu中安装OracleJDK并设置环境

首先下载Oracle JDK的.tar.gz文件并解压至/usr/lib/jvm,再通过update-alternatives注册Java命令,设置默认JDK版本,并在~/.bashrc中配置JAVA_HOME和PATH环境变量,最后验证java -version和JAVA_HOME确保安装正确。该方法适用于需要兼容特定商业软件或统一开发环境的场景。

如何在ubuntu中安装oraclejdk并设置环境

在Ubuntu中安装Oracle JDK,核心在于从Oracle官网下载其

.tar.gz

压缩包,手动解压到系统路径,然后通过配置环境变量

JAVA_HOME

和修改

PATH

,或者更推荐地使用

update-alternatives

工具,将新安装的JDK注册并设置为系统默认的Java环境。

解决方案

要在Ubuntu系统上安装Oracle JDK并妥善配置环境,通常我会遵循以下步骤。虽然OpenJDK是Ubuntu的默认选择,但在某些特定场景,比如需要与某些商业软件兼容,或者仅仅是个人偏好,Oracle JDK依然是不可或缺的。

下载Oracle JDK压缩包:访问Oracle官方网站的Java SE下载页面。你需要找到适合Linux x64架构的

.tar.gz

文件。注意,Oracle JDK的下载通常需要接受许可协议。选择一个长期支持(LTS)版本,比如JDK 17或JDK 11,它们在稳定性和社区支持上都有很好的表现。下载完成后,这个文件通常会保存在你的

~/Downloads

目录下。

创建安装目录:为了保持系统整洁和规范,我习惯将JDK安装到

/usr/lib/jvm

目录下。如果这个目录不存在,你需要先创建它。

sudo mkdir -p /usr/lib/jvm

解压JDK到目标目录:将你下载的

.tar.gz

文件解压到刚刚创建的

/usr/lib/jvm

目录。请将

jdk-xx_linux-x64.tar.gz

替换为你实际下载的文件名,并将

jdk-17.0.x

替换为解压后生成的目录名(例如,

jdk-17.0.10

)。

cd ~/Downloadssudo tar -xvf jdk-xx_linux-x64.tar.gz -C /usr/lib/jvm/# 解压后,你可能会得到一个类似 jdk-17.0.x 的目录。为了方便管理,可以给它一个更清晰的软链接或重命名。# 例如,如果解压后是 /usr/lib/jvm/jdk-17.0.10,可以创建一个软链接:# sudo ln -s /usr/lib/jvm/jdk-17.0.10 /usr/lib/jvm/oracle-jdk-17# 之后所有的配置都指向 /usr/lib/jvm/oracle-jdk-17

我个人更倾向于直接重命名解压后的目录,比如

sudo mv /usr/lib/jvm/jdk-17.0.10 /usr/lib/jvm/oracle-jdk-17

,这样路径更直观。

配置系统环境变量(推荐使用

update-alternatives

):Ubuntu提供了一个非常方便的

update-alternatives

工具来管理系统中不同版本的程序。这是我最推荐的方式,因为它能让你轻松地在多个JDK版本之间切换。

注册Oracle JDK到

update-alternatives

系统:

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/oracle-jdk-17/bin/java" 1sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/oracle-jdk-17/bin/javac" 1sudo update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/jvm/oracle-jdk-17/bin/jar" 1sudo update-alternatives --install "/usr/bin/javadoc" "javadoc" "/usr/lib/jvm/oracle-jdk-17/bin/javadoc" 1# 可以根据需要注册更多Java工具,比如 jjs, keytool 等

这里的

1

是优先级,数字越大优先级越高。如果你安装了多个JDK,可以通过调整优先级来控制默认使用哪个。

选择Oracle JDK作为默认的Java版本:

sudo update-alternatives --config javasudo update-alternatives --config javac

运行这些命令后,系统会列出所有已注册的Java和Javac版本,并提示你输入数字来选择默认使用的版本。

设置

JAVA_HOME

环境变量:虽然

update-alternatives

已经处理了

java

javac

命令的路径,但许多Java应用程序和构建工具(如Maven、Gradle)仍然依赖于

JAVA_HOME

环境变量来定位JDK的安装路径。

打开你的用户配置文件(通常是

~/.bashrc

~/.profile

,如果你使用Zsh可能是

~/.zshrc

):

nano ~/.bashrc

在文件末尾添加以下两行:

export JAVA_HOME="/usr/lib/jvm/oracle-jdk-17"export PATH="$PATH:$JAVA_HOME/bin"

保存并关闭文件。

让配置立即生效:

source ~/.bashrc

如果你修改的是

~/.profile

,可能需要注销并重新登录才能生效。

验证安装:打开一个新的终端窗口(或重新加载配置后),运行以下命令来确认Oracle JDK已正确安装并设置为默认:

java -versionjavac -versionecho $JAVA_HOME

你应该能看到Oracle JDK的版本信息,并且

JAVA_HOME

指向你设置的路径。

为什么我应该选择Oracle JDK而不是Ubuntu默认的OpenJDK?

这是一个非常实际的问题,尤其是在我个人开发经历中,经常会遇到。Ubuntu默认安装的OpenJDK,在大多数情况下都表现得非常出色,而且它是完全开源、免费的。但选择Oracle JDK,往往是出于一些特定的考量:

首先,兼容性需求。我遇到过一些老旧的、或者由特定厂商开发的商业Java应用,它们在设计和测试时可能就是基于Oracle JDK进行的。虽然理论上Java是“一次编写,到处运行”,但实际操作中,不同JDK实现之间在某些边缘特性、JVM参数甚至垃圾回收器行为上可能存在细微差异。为了避免那些难以追踪的“玄学”兼容性问题,或者第三方服务明确要求使用Oracle JDK时,我通常会选择它。

帮衣帮-AI服装设计 帮衣帮-AI服装设计

AI服装设计神器,AI生成印花、虚拟试衣、面料替换

帮衣帮-AI服装设计 106 查看详情 帮衣帮-AI服装设计

其次,特定功能或工具。虽然Oracle已经将很多核心功能(比如JFR/JMC)开源给了OpenJDK,但在一些非常专业的企业级场景下,Oracle JDK可能仍提供一些独特的商业特性、性能优化或者支持服务,这些对于某些高度敏感或性能关键的应用来说,可能是决定性的因素。虽然现在这些差异越来越小,但在一些遗留系统或特定领域,Oracle JDK的优势依然存在。

最后,个人习惯或团队规范。我认识不少开发者,他们从Java的早期阶段就一直使用Oracle JDK,对其工具链和行为模式非常熟悉。当团队内部有统一的JDK版本和发行商要求时,为了保持开发环境的一致性,使用Oracle JDK也是一个合理的选择。这无关乎好坏,更多是基于实际工作流和历史沉淀的考量。

总而言之,如果你只是进行日常开发、学习或者运行一般的开源应用,OpenJDK通常是足够且更简单的选择。但如果你的项目有明确的兼容性要求、需要特定的企业级支持或功能,或者只是想保持与生产环境的高度一致性,那么Oracle JDK就有了它的用武之地。

如何管理多个JDK版本并在它们之间切换?

在我的日常开发中,同时维护多个Java项目是常态,而这些项目可能依赖不同的JDK版本,比如一个老项目跑在JDK 8上,新项目则需要JDK 17。这时候,高效地管理和切换JDK版本就显得尤为重要。

最优雅的解决方案,我认为非

update-alternatives

莫属。前面安装Oracle JDK时已经用到了它,这里我们来深入理解一下它的工作原理和使用方式。

update-alternatives

通过在

/etc/alternatives

目录下创建符号链接,并最终指向实际的二进制文件,来管理系统中同名程序的多个版本。

添加更多JDK版本:如果你想安装另一个版本的JDK(比如OpenJDK 8),你可以像安装Oracle JDK一样,下载、解压到

/usr/lib/jvm/

目录下,然后用

update-alternatives

注册它。

# 假设你安装了 OpenJDK 8 到 /usr/lib/jvm/openjdk-8sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/openjdk-8/bin/java" 2sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/openjdk-8/bin/javac" 2# 注意这里的优先级数字,如果想让它成为默认,就设置一个比现有更高的数字。# 如果只是备用,保持较低的优先级即可。

在不同JDK版本间切换:这是

update-alternatives

最实用的功能。只需运行:

sudo update-alternatives --config javasudo update-alternatives --config javac

系统会列出所有已注册的

java

(或

javac

)版本,每个版本前都有一个编号。你只需输入对应的编号,然后回车,即可将系统默认的Java版本切换到你选择的那一个。这个操作会立即生效,无需重启终端或系统。

针对特定项目设置

JAVA_HOME

虽然

update-alternatives

管理了全局的

java

javac

命令,但许多构建工具(如Maven、Gradle)或IDE(如IntelliJ IDEA、Eclipse)会优先读取

JAVA_HOME

环境变量来确定使用哪个JDK。

临时切换

JAVA_HOME

如果你只是想在当前终端会话中为某个项目使用特定JDK,可以临时设置

JAVA_HOME

export JAVA_HOME="/usr/lib/jvm/openjdk-8" # 或者 /usr/lib/jvm/oracle-jdk-17export PATH="$JAVA_HOME/bin:$PATH" # 确保新路径在前java -version # 验证

这个设置只在当前终端会话有效,关闭终端后就会失效。

通过IDE或构建工具设置:更常见且推荐的做法是,在你的IDE(如IntelliJ IDEA的Project Structure或Eclipse的Installed JREs)中直接配置项目所需的JDK路径。Maven或Gradle项目也可以在其配置文件中指定JDK路径,这样可以确保项目在不同开发者的机器上都能使用正确的JDK版本,而不会受到全局

JAVA_HOME

的影响。这种方式的好处是,你可以让全局系统默认使用一个JDK,而特定项目则使用另一个,互不干扰。

安装后遇到问题如何排查和解决?

即使安装过程看起来很顺利,也难免会遇到一些小插曲。我个人在配置JDK环境时,最常遇到的就是

java -version

javac -version

显示不一致,或者应用启动报错。以下是一些常见的排查和解决思路:

java -version

显示错误版本或命令未找到:

检查

PATH

环境变量: 这是最常见的问题。运行

echo $PATH

,看看你的

JAVA_HOME/bin

路径是否正确地包含在其中,并且它的优先级是否足够高(通常放在前面)。如果

update-alternatives

配置的

/usr/bin

路径没有生效,也需要检查

PATH

重新加载shell配置: 如果你修改了

~/.bashrc

~/.profile

,确保你已经运行了

source ~/.bashrc

(或

source ~/.profile

),或者干脆打开一个新的终端窗口,因为环境变量只在新的shell会话中生效。检查

update-alternatives

配置: 运行

sudo update-alternatives --config java

sudo update-alternatives --config javac

,确认你已经选择了正确的Oracle JDK版本作为默认。有时候,手动设置

JAVA_HOME

可能会与

update-alternatives

的全局设置产生冲突,导致混乱。文件权限问题: 检查

/usr/lib/jvm/oracle-jdk-17

及其内部文件的权限,确保所有用户(至少是当前用户)有读取和执行的权限。

ls -l /usr/lib/jvm/oracle-jdk-17/bin/java

可以帮助你检查。

javac

命令未找到或版本不匹配:

这通常与

java

命令的问题类似,排查思路也基本相同。

javac

是JDK的一部分,如果

java

能正常工作,

javac

通常也能。重点检查

PATH

update-alternatives --config javac

应用程序运行时出现

UnsupportedClassVersionError

这个错误意味着你的Java应用程序是用一个更高版本的JDK编译的,而你当前运行它的JDK版本太低。例如,用JDK 17编译的代码,尝试在JDK 8上运行就会报错。解决方案: 确保你运行应用程序的Java环境(无论是通过

java -jar

直接运行,还是通过Maven/Gradle构建)与编译该应用程序的JDK版本相同或更高。你可以通过

java -version

来确认当前运行环境的JDK版本。

下载的JDK压缩包损坏:

如果你在解压时遇到错误,或者解压后的文件不完整,很可能是下载过程中文件损坏了。重新从Oracle官网下载一次,并确保网络连接稳定。

JAVA_HOME

设置错误:

运行

echo $JAVA_HOME

,确认它指向的是JDK的根目录,而不是

bin

目录。例如,应该是

/usr/lib/jvm/oracle-jdk-17

,而不是

/usr/lib/jvm/oracle-jdk-17/bin

。许多Java工具和脚本都依赖这个变量来查找JDK的完整安装路径。

排查这些问题时,我通常会一步步来,从最表层的

java -version

开始,然后检查

PATH

,再到

JAVA_HOME

,最后才是更深层次的权限或文件完整性问题。耐心和细致是解决这些配置问题的关键。

以上就是如何在Ubuntu中安装OracleJDK并设置环境的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/325499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
问题分析:thinkphp能回滚吗
上一篇 2025年11月5日 11:49:19
网络球机定时任务配置
下一篇 2025年11月5日 11:49:22

相关推荐

  • 100个Linux常用的命令

    linux命令是对linux系统进行管理的命令。对于linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,linux系统管理的命令是它正常运行的核心,与之前的dos命令类似。linux命令在系统中有两种类型:内置shell命令和linux命令。这篇文章我们就列举一下…

    用户投稿 2026年9月4日
    000
  • 约一年时间内,苹果公司已下架 4 次“争议性”广告

    6 月 25 日消息,苹果再次在发布广告后迅速将其撤下。据外媒 the verge 报道,这已经是过去一年多时间里第四支被下架的广告作品。此次涉及的广告名为《the parent presentation》,时长接近八分钟,由喜剧演员马丁・赫尔利主演,内容围绕学生如何说服父母购买 mac 展开。 这…

    2026年9月4日
    000
  • 如何为JavaScript工具库优雅地编写TypeScript类型定义?

    为JavaScript工具库编写优雅的TypeScript类型定义 本文探讨如何为JavaScript工具库编写清晰、准确的TypeScript类型定义文件,特别是index.d.ts文件的编写方法。我们将以名为single-promises的工具库为例,该库包含一个singlepromise函数,…

    2026年9月4日
    000
  • 几个常用的linux系统之间传输文件的命令

    linux命令是对linux系统进行管理的命令。对于linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,linux系统管理的命令是它正常运行的核心,与之前的dos命令类似。linux命令在系统中有两种类型:内置shell命令和linux命令。不同的linux之间c…

    用户投稿 2026年9月4日
    300
  • x浏览器怎么把网页保存为PDF_x浏览器网页打印并另存为PDF方法

    使用x浏览器打印功能可将网页保存为PDF。打开网页后点击菜单选择“打印”,设置目标为“保存为PDF”,点击保存并确认路径即可生成文件;或长按页面选择“保存为PDF”选项,勾选包含图片与样式后指定目录保存;若功能受限,可复制链接至WPS Office等第三方应用粘贴并导出为PDF完成转换。 如果您在浏…

    2026年9月4日
    100
  • win8怎么把应用固定到任务栏_win8应用固定到任务栏操作方法

    可通过开始屏幕、运行程序、桌面快捷方式或文件资源管理器将应用固定到任务栏。1、在开始屏幕搜索应用并右键选择“固定到任务栏”;2、运行程序后右键任务栏图标选择“将此程序固定到任务栏”;3、拖动桌面快捷方式至任务栏;4、在文件资源管理器中找到程序exe文件,右键选择“固定到任务栏”或拖拽至任务栏完成固定…

    2026年9月4日
    200
  • 如何为JavaScript工具库编写正确的TypeScript类型定义?

    typescript类型定义与javascript工具库集成详解 本文探讨如何为JavaScript工具库编写正确的TypeScript类型定义文件(.d.ts)。我们将以一个名为single-promises的JavaScript工具库为例,分析并解决类型定义方面的问题。 该工具库的核心函数sin…

    2026年9月4日
    100
  • 告别代码文档编写难题:使用klitsche/dog自动生成API文档

    我曾经负责维护一个大型的php项目,随着项目规模的不断扩大,代码文档的维护也变得越来越困难。每次添加新功能或修改现有代码时,都需要花费大量时间更新文档,这不仅效率低下,而且容易出错,导致文档与代码不一致。为了解决这个问题,我尝试过一些文档生成工具,但要么过于复杂,要么功能不足,无法满足我的需求。 直…

    用户投稿 2026年9月4日
    300
  • word文档怎么画竖线_word绘制竖线及格式调整方法

    word文档怎么画竖线_word绘制竖线及格式调整方法word文档怎么画竖线_word绘制竖线及格式调整方法word文档怎么画竖线_word绘制竖线及格式调整方法word文档怎么画竖线_word绘制竖线及格式调整方法

    答案:通过边框、表格或形状工具可在Word中添加竖线。选中段落使用边框功能可添加左侧竖线;插入窄列表格并设置单边框可作隐形竖线;利用形状工具可自由绘制直线。每种方法均可自定义线条样式、颜色和宽度,配合间距调整使排版更美观。 在Word文档中画竖线,通常是为了分隔文本内容或美化排版。虽然Word没有直…

    2026年9月4日 用户投稿
    000
  • MySQL Scheduler Events带来的风险

    MySQL Scheduler Events带来的风险MySQL Scheduler Events带来的风险MySQL Scheduler Events带来的风险MySQL Scheduler Events带来的风险

    定时任务是开发和运维人员常用的工具,例如cron、job、schedule、events scheduler等,这些工具旨在自动化重复执行某些任务。在这里,我们将探讨mysql数据库内置的定时任务——events scheduler带来的风险案例。 一、现象描述 从库出现了数据不同步现象,具体错误如…

    2026年9月4日 用户投稿
    1000
  • 这次简单多了,最新版 MongoDB 安装

    这次简单多了,最新版 MongoDB 安装这次简单多了,最新版 MongoDB 安装这次简单多了,最新版 MongoDB 安装这次简单多了,最新版 MongoDB 安装

    在 windows 10 系统上安装 mongodb 4.0.1 版本变得更为简便,基本上一路点击“下一步”就能完成安装,不再需要繁琐的配置。 首先,访问 MongoDB 官方网站,下载 MongoDB 4.0.1 版本,网址如下: https://www.php.cn/link/9cba84644…

    2026年9月4日 用户投稿
    300
  • 利用wps公式编辑器编辑统计公式_通过wps公式编辑器实现统计符号的步骤

    在WPS文字中插入统计公式需通过“插入”选项卡打开公式编辑器;2. 使用上方横线、希腊字母、根式和求和等模板输入均值x̄、μ、σ、√及∑i=1n等符号;3. 以样本标准差为例,输入”S =”后插入分数,分子用根式内嵌求和符号并添加上下标,输入(xi – x̄)²,…

    2026年9月4日
    000
  • 关于Linux 自动唤醒和关闭的实现方法

    不知道大家对linux 自动唤醒和关闭有多少理解,本文主要介绍了linux 自动唤醒和关闭的实现方法,需要的朋友可以参考下,希望能帮助到大家。 一. 系统休眠(crontab)  示例说明(创建一个 root 定时任务实现每天晚上 11 点 15 分定时关机): # crontab -e -u ro…

    用户投稿 2026年9月4日
    000
  • linux下vsftpd的安装及配置介绍

    本文主要介绍了linux下vsftpd的安装及配置使用详细步骤 ,需要的朋友可以参考下,希望能帮助到大家。 vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。 vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linu…

    用户投稿 2026年9月3日
    000
  • [python]windows上安装pyaudio最简单方法

    pyaudio是一个用于处理音频流的python库,它依赖于portaudio库。如果直接使用pip命令无法安装pyaudio,可以尝试通过whl文件进行安装。以下是pyaudio通过whl文件安装的详细方法: 一、准备阶段 下载PyAudio的whl文件 访问可靠的Python包分发网站,如镜像站…

    2026年9月3日
    100
  • 高效连接SoftLayer API:使用SoftLayer API PHP Client的实践指南

    最近在开发一个管理softlayer服务器的工具时,我需要频繁地与softlayer api交互。起初,我直接使用php的curl库进行api调用,这导致代码冗长且难以维护,错误处理也十分繁琐。 api 的响应数据结构复杂,解析起来也费时费力。为了解决这些问题,我找到了softlayer官方提供的p…

    2026年9月3日
    100
  • 如何清理谷歌浏览器本地缓存的文件

    随着使用时间的增长,谷歌浏览器会存储大量的缓存文件以加快网页的加载速度。但这些缓存有时也会导致网页显示不正确、内容更新不及时,或者占用过多的磁盘空间。本文将为您提供一套完整的操作指南,通过不同的方法,教您如何有效地清理谷歌浏览器的本地缓存文件,从而解决潜在问题并优化浏览器性能。 立即进入“免费看电影…

    2026年9月3日
    200
  • linux操作系统原理基础

    linux操作系统原理基础linux操作系统原理基础linux操作系统原理基础linux操作系统原理基础

    本文主要和大家讲述linux操作系统原理,这是一篇非常好的linux系统基础教程,我们总结了相关的全部精选内容,一起来学习下。希望能帮助到大家。 linux操作系统原理文字版 一.计算机经历的四个时代 1.第一代: 真空管计算机,输入和输出:穿孔卡片,对计算机操作起来非常不便,做一件事可能需要十几个…

    2026年9月3日 用户投稿
    100
  • Java语法基础中this关键字的用法有哪些

    this是Java中指向当前对象的关键字,用于区分成员变量与局部变量(如this.name = name)、在构造器中调用其他构造器(this()且需位于首行)等。 this 是 Java 中的一个关键字,表示当前对象的引用。它在类的实例方法和构造器中使用,用来指向调用该方法或正在创建的那个对象。t…

    2026年9月3日
    100
  • 高德地图如何分享我的实时位置_高德地图实时位置分享方法

    高德地图支持实时位置共享,可通过“位置共享”快速发起临时共享,设置时长并选择联系人;使用“家人地图”创建长期共享群组,便于家庭成员追踪位置;在导航时可分享实时路线至微信等平台,显示行进方向与预计到达时间;还可通过“群组”工具建立团队共享,适合多人协同定位,方便集合与行程协调。 如果您希望与亲友或同事…

    2026年9月3日
    200

发表回复

登录后才能评论
关注微信