如何在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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 11:48:49
下一篇 2025年11月5日 11:49:55

相关推荐

  • 如何在 VS Code 中解决折叠代码复制问题?

    解决 VS Code 折叠代码复制问题 在 VS Code 中使用折叠功能可以帮助组织长代码,但使用复制功能时,可能会遇到只复制可见部分的问题。以下是如何解决此问题: 当代码被折叠时,可以使用以下简单操作复制整个折叠代码: 按下 Ctrl + C (Windows/Linux) 或 Cmd + C …

    2025年12月24日
    000
  • 姜戈顺风

    本教程演示如何在新项目中从头开始配置 django 和 tailwindcss。 django 设置 创建一个名为 .venv 的新虚拟环境。 # windows$ python -m venv .venv$ .venvscriptsactivate.ps1(.venv) $# macos/linu…

    2025年12月24日
    000
  • 深入理解CSS框架与JS之间的关系

    深入理解CSS框架与JS之间的关系 在现代web开发中,CSS框架和JavaScript (JS) 是两个常用的工具。CSS框架通过提供一系列样式和布局选项,可以帮助我们快速构建美观的网页。而JS则提供了一套功能强大的脚本语言,可以为网页添加交互和动态效果。本文将深入探讨CSS框架和JS之间的关系,…

    2025年12月24日
    000
  • HTML+CSS+JS实现雪花飘扬(代码分享)

    使用html+css+js如何实现下雪特效?下面本篇文章给大家分享一个html+css+js实现雪花飘扬的示例,希望对大家有所帮助。 很多南方的小伙伴可能没怎么见过或者从来没见过下雪,今天我给大家带来一个小Demo,模拟了下雪场景,首先让我们看一下运行效果 可以点击看看在线运行:http://hai…

    2025年12月24日 好文分享
    500
  • 10款好看且实用的文字动画特效,让你的页面更吸引人!

    图片和文字是网页不可缺少的组成部分,图片运用得当可以让网页变得生动,但普通的文字不行。那么就可以给文字添加一些样式,实现一下好看的文字效果,让页面变得更交互,更吸引人。下面创想鸟就来给大家分享10款文字动画特效,好看且实用,快来收藏吧! 1、网页玻璃文字动画特效 模板简介:使用css3制作网页渐变底…

    2025年12月24日 好文分享
    000
  • tp5如何引入css文件

    tp5引入css文件的方法:1、将css文件放在public目录下的static文件里即可;2、在页面引入中写上“”语句即可。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 其实很简单,只需要将css,js,image文件放在这个目录下即可 页…

    2025年12月24日
    000
  • 聊聊CSS 与 JS 是如何阻塞 DOM 解析和渲染的

    本篇文章给大家介绍一下css和js阻塞 dom 解析和渲染的原理。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 hello~各位亲爱的看官老爷们大家好。估计大家都听过,尽量将CSS放头部,JS放底部,这样可以提高页面的性能。然而,为什么呢?大家有考虑过么?很长一段时间,我都是知其…

    2025年12月24日
    200
  • js如何修改css样式

    js修改css样式的方法:1、使用【obj.className】来修改样式表的类名;2、使用【obj.style.cssTest】来修改嵌入式的css;3、使用【obj.className】来修改样式表的类名;4、使用更改外联的css。 本教程操作环境:windows7系统、css3版,DELL G…

    2025年12月24日
    000
  • 如何使用纯CSS、JS实现图片轮播效果

    本篇文章给大家详细介绍一下使用纯css、js实现图片轮播效果的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 .carousel {width: 648px;height: 400px;margin: 0 auto;text-align: center;position: a…

    2025年12月24日
    000
  • js如何修改css

    js修改css的方法:1、使用【obj.style.cssTest】来修改嵌入式的css;2、使用【bj.className】来修改样式表的类名;3、使用更改外联的css文件,从而改变元素的css。 本教程操作环境:windows7系统、css3版,DELL G3电脑。 js修改css的方法: 方法…

    2025年12月24日
    000
  • js如何改变css样式

    js改变css样式的方法:1、使用cssText方法;2、使用【setProperty()】方法;3、使用css属性对应的style属性。 本教程操作环境:windows7系统、css3版,DELL G3电脑。 js改变css样式的方法: 第一种:用cssText div.style.cssText…

    2025年12月24日
    000
  • 如何解决eclipse css文件乱码问题

    eclipse css文件乱码的解决办法:首先在CSS文件上右键“属性”,查看文件默认的编码;然后将编码改为“UTF8”;最后点击Apply应用新设置即可。 本文操作环境:windows7系统、css3版本、Dell G3电脑。 eclipse导致css文件乱码怎么解决? 如果CSS文件不是使用的U…

    2025年12月24日 好文分享
    000
  • eclipse css中文乱码怎么办

    eclipse css中文乱码是因为文件编码与字符编码等不匹配造成的,其解决办法:首先打开eclipse;然后在properties中,找到并选择UTF-8;最后点击Apply应用新设置即可。 本教程操作环境:windows7系统、Eclipse IDE 2020-06 R版本,DELL G3电脑。…

    2025年12月24日 好文分享
    000
  • 为什么css放上面js放下面

    css放上面js放下面的原因:1、在加载html生成DOM tree的时候,可以同时对DOM tree进行渲染,这样可以防止闪跳,白屏或者布局混乱;2、javascript加载后会立即执行,同时会阻塞后面的资源加载。 本文操作环境:Windows7系统、HTML5&&CSS3版,DE…

    2025年12月24日
    000
  • 如何解决eclipse css乱码问题

    eclipse css乱码的解决办法:首先打开的一个CSS文件;然后选择“Save As UTF-8”;接着在CSS文件上右键属性并查看编码;最后选择“UTF-8”,并点击“Apply”应用新设置即可。 本教程操作环境:Dell G3电脑、Windows7系统、Eclipse IDE 2020-06…

    2025年12月24日 好文分享
    000
  • 推荐六款移动端 UI 框架

    作为一个前端人员来说,总结几款相对来说不错的用于移动端开发的UI框架是非常必要的,以下几种移动端UI框架就能基本满足工作中开发需要,根据项目需求,选用合适的框架搭建项目,更能容易提高开发效率。 一、MUI         最接近原生APP体验的高性能前端框架,追求性能体验,是我们开始启动MUI项目的…

    2025年12月24日
    000
  • css如何实现图片的旋转展示效果(代码示例)

    本篇文章给大家带来内容是通过代码示例介绍使用css+js实现图片的旋转展示,制作一个手动操作的“无限”照片轮播图。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 下面我们就开始介绍如何实现效果。 1、构建图像轮播框架 首先是HTML。它有点难以阅读,因为我们删除了元素之间的任何空格…

    2025年12月24日
    000
  • css3+js实现烟花绽放的动画效果(代码示例)

    本篇文章给大家介绍通过js+css3的transforms属性和keyframes属性来实现烟花绽放的动画效果的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 首先我们来看看效果: 动画的实现原理: 动画使用了两个关键帧(keyframes): 一个是烟花筒上升的轨迹,另一个…

    2025年12月24日
    000
  • css+js如何在幻灯片上添加文字?实现幻灯片的旋转切换(附代码)

    本篇文章给大家带来的内容是介绍css+js如何在幻灯片上添加文字?实现幻灯片的旋转切换(附代码)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 在之前的文章【css如何实现幻灯片效果?幻灯片的实现方法】中介绍了实现淡入淡出幻灯片的实现方法,本篇文章就在其基础上去解释如何在幻灯片上…

    2025年12月24日
    000
  • css+js如何实现简单的动态进度条效果?(代码实例)

    css+js如何实现简单的动态进度条?本篇文章就给大家用css+js制作一个简单的动态进度条效果,并将页面动态进度条滚动加载的代码分享给大家,感兴趣的小伙伴可以参考借鉴一下,希望对你们有所帮助。 我们要知道,这里主要使用了css3的animation动画属性,首先将进度条设置为一个初始宽度为0,背景…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信