Linux下Java环境配置详解
学习文章要努力,但是不要急!今天的这篇文章《Linux下Java环境配置全攻略》将会介绍到等等知识点,如果你想深入学习文章,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!
配置Linux服务器上的Java环境,核心步骤如下:1. 下载OpenJDK安装包,推荐使用长期支持版本如Java 11、17或21,从Adoptium等可信源获取;2. 创建安装目录(如/usr/local/java),解压下载的.tar.gz文件;3. 设置环境变量,在/etc/profile中配置JAVA_HOME和PATH;4. 执行source /etc/profile使配置生效;5. 验证安装,通过java -version、javac -version和echo $JAVA_HOME确认是否成功。选择OpenJDK因其开源免费且性能与Oracle JDK相当,适合生产环境。管理多版本可通过手动切换JAVA_HOME、使用update-alternatives工具(适用于Debian/Ubuntu)或SDKMAN!实现灵活切换。常见问题包括路径错误、未执行source、权限不足或系统自带Java干扰,排查时应逐一验证JAVA_HOME、PATH、文件权限及配置文件生效情况。
Linux服务器上配置Java环境,说实话,这事儿看似简单,但真要搞起来,总有些小细节能让你抓狂。核心无非就是下载JDK、解压、设置环境变量,最后验证一下。但每一步都有可能因为各种原因让你卡壳,比如版本选择、权限问题、路径配置错误等等。掌握这些步骤,能让你在部署Java应用时少走很多弯路。

解决方案
配置Linux服务器上的Java环境,通常涉及以下几个关键步骤。我个人倾向于使用OpenJDK,因为它完全开源,没有Oracle JDK的商业许可限制,对于服务器环境来说是更稳妥的选择。

下载JDK安装包 首先,你需要确定要安装的Java版本。目前LTS(长期支持)版本如Java 11、Java 17、Java 21都是不错的选择。你可以从Adoptium(Eclipse Temurin)、Red Hat OpenJDK等官方或可信赖的源下载。 通常,你会下载一个
.tar.gz
格式的压缩包。 例如,下载OpenJDK 17:# 切换到你希望下载的目录,比如 /opt cd /opt # 使用wget下载,请替换为最新或你需要的版本链接 # 可以在 Adoptium (https://adoptium.net/temurin/releases/) 找到下载链接 wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.10_7.tar.gz
如果你没有
wget
命令,可能需要先安装它:sudo apt install wget
(Debian/Ubuntu) 或sudo yum install wget
(CentOS/RHEL)。创建安装目录并解压 为了保持系统整洁和管理方便,我习惯将Java安装到
/usr/local/java
目录下。# 创建目录 sudo mkdir -p /usr/local/java # 解压下载的JDK包到指定目录 # 注意:这里的压缩包名称和解压后的目录名称需要根据你实际下载的JDK版本来调整 sudo tar -zxvf /opt/OpenJDK17U-jdk_x64_linux_hotspot_17.0.10_7.tar.gz -C /usr/local/java # 进入解压后的目录,查看实际的JDK文件夹名,比如可能是 jdk-17.0.10+7 ls /usr/local/java
记住解压后实际的JDK文件夹名,例如
jdk-17.0.10+7
,后续配置环境变量会用到。配置环境变量 这是最关键的一步。我们需要设置
JAVA_HOME
和将Java的可执行文件路径添加到PATH
中。通常,我会编辑/etc/profile
文件,这样配置对所有用户都生效。# 编辑profile文件 sudo vi /etc/profile
在文件末尾添加以下内容(请将
jdk-17.0.10+7
替换为你实际的JDK文件夹名):# Java Environment Variables export JAVA_HOME=/usr/local/java/jdk-17.0.10+7 export PATH=$JAVA_HOME/bin:$PATH # 如果还需要CLASSPATH,可以添加,但现代Java应用通常不依赖它 # export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
保存并退出
vi
编辑器(按Esc
键,然后输入:wq
回车)。 使配置立即生效:source /etc/profile
有时候你以为搞定了,结果一重启服务器,或者换个用户登录,又懵了。那多半就是
source
命令没执行,或者配置错了文件。验证安装 配置完成后,验证Java是否成功安装并生效:
java -version javac -version echo $JAVA_HOME
如果一切顺利,
java -version
会显示你安装的Java版本信息,javac -version
也会显示对应的编译器版本,echo $JAVA_HOME
则会输出你设置的JAVA_HOME
路径。
为什么选择OpenJDK而不是Oracle JDK?
这是一个很实际的问题,尤其是在企业环境中。我个人强烈推荐在服务器上使用OpenJDK,主要原因在于许可协议。Oracle在Java 8之后更改了Oracle JDK的许可策略,简单来说,如果你在生产环境中使用Oracle JDK 11及更高版本,或者继续使用Java 8的某些更新版本,可能需要付费。这对于很多公司来说是个潜在的成本和合规性风险。
OpenJDK是Java的开源实现,由社区和多家公司(包括Oracle本身)共同维护。它完全免费,可以自由地用于任何目的,包括商业用途。性能上,OpenJDK和Oracle JDK在绝大多数情况下表现一致,几乎没有可感知的差异。许多主流的Linux发行版,如Ubuntu、CentOS,它们默认提供的Java包就是OpenJDK。因此,选择OpenJDK可以避免不必要的法律和财务麻烦,同时获得同等的性能和功能。
如何管理多个Java版本?
在开发或测试环境中,你可能需要同时安装和切换不同的Java版本。这就像一个工具箱,你需要根据不同的项目需求取出不同的工具。管理多个Java版本有几种常见方法:
手动切换
JAVA_HOME
: 这是最直接的方法。你可以将不同的JDK版本解压到/usr/local/java/
下的不同子目录,比如jdk-11
、jdk-17
。 当需要切换时,直接修改/etc/profile
(或用户自己的~/.bashrc
)中的JAVA_HOME
变量,然后source
文件使其生效。# 切换到Java 11 export JAVA_HOME=/usr/local/java/jdk-11 export PATH=$JAVA_HOME/bin:$PATH source /etc/profile # 切换到Java 17 export JAVA_HOME=/usr/local/java/jdk-17 export PATH=$JAVA_HOME/bin:$PATH source /etc/profile
这种方法简单粗暴,但对于频繁切换来说效率不高。
使用
update-alternatives
(Debian/Ubuntu): 对于基于Debian或Ubuntu的系统,update-alternatives
是一个非常方便的工具,它可以管理系统中的不同程序版本。 你可以将不同的Java版本注册到update-alternatives
系统中:sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk-11/bin/java 1 sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk-17/bin/java 2 sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk-11/bin/javac 1 sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk-17/bin/javac 2 # 可以继续添加jar, javadoc等工具
这里的数字(1和2)是优先级,数字越大优先级越高。 切换Java版本:
sudo update-alternatives --config java sudo update-alternatives --config javac
系统会列出可用的Java版本,让你选择。这种方法很适合系统级的Java版本管理。
使用版本管理工具(如SDKMAN!):
SDKMAN!
是一个强大的命令行工具,用于在类Unix系统上管理多种SDK(包括Java、Groovy、Scala、Kotlin等)。它可以在用户级别安装和切换SDK,无需root权限,非常适合开发者。 安装SDKMAN!
:curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh"
安装和切换Java版本:
sdk list java # 查看所有可用Java版本 sdk install java 17.0.10-tem # 安装特定版本 sdk use java 17.0.10-tem # 切换到特定版本(当前shell会话有效) sdk default java 17.0.10-tem # 设置默认版本
我个人在开发机上非常喜欢用
SDKMAN!
,因为它灵活且不影响系统全局配置。
Java环境配置中常见的坑和排查方法?
在配置Java环境时,总会遇到一些让人头疼的小问题,这些“坑”往往隐藏在细节里。别问我为什么知道,血泪教训。
JAVA_HOME
路径错误或未设置: 这是最常见的错误。你可能解压后目录名不小心打错了,或者复制粘贴时多余的空格。 排查方法:echo $JAVA_HOME
:检查JAVA_HOME
变量是否正确指向了JDK的根目录。ls -l $JAVA_HOME/bin/java
:验证$JAVA_HOME/bin/java
这个路径下是否存在java
可执行文件。如果ls
报错,说明JAVA_HOME
路径不对。
PATH
变量未包含$JAVA_HOME/bin
: 即使JAVA_HOME
设置正确,如果PATH
变量中没有包含$JAVA_HOME/bin
,系统也找不到java
命令。 排查方法:echo $PATH
:检查输出中是否包含类似/usr/local/java/jdk-17.0.10+7/bin
这样的路径。which java
:如果Java已正确配置,这个命令会显示java
可执行文件的完整路径,通常是$JAVA_HOME/bin/java
。如果显示为空或指向其他路径,说明PATH
有问题。
未
source /etc/profile
或配置了错误的文件: 修改了/etc/profile
后,必须执行source /etc/profile
命令才能让修改生效,否则当前会话还是使用旧的环境变量。有时候,新手可能会修改~/.bashrc
,但期望它对所有用户或系统服务生效,这是不对的。/etc/profile
是系统级的,~/.bashrc
是用户级的。 排查方法:- 修改
/etc/profile
后,立即执行source /etc/profile
。 - 如果问题仍然存在,尝试登出并重新登录SSH会话,或者重启服务器(这是最粗暴但有效的方法)。
- 检查你修改的文件是否真的是
/etc/profile
,而不是/etc/bashrc
或其他。
- 修改
权限问题: 下载的JDK包可能没有执行权限,或者解压到的目录没有正确权限。 排查方法:
ls -l /usr/local/java/jdk-17.0.10+7/bin/java
:确保java
文件有x
(执行)权限。如果没有,使用sudo chmod +x /usr/local/java/jdk-17.0.10+7/bin/java
。- 确保
/usr/local/java
目录及其内容对运行Java应用的用户是可读的。
系统自带的Java版本冲突: 有些Linux发行版可能预装了OpenJDK。当你手动安装后,系统可能仍然优先使用预装的版本。 排查方法:
which java
:看它指向哪个路径。readlink -f $(which java)
:这个命令能显示java
命令实际指向的路径,可以帮你找出是不是系统自带的Java在作怪。- 如果发现是系统自带的Java在捣乱,可以考虑卸载系统自带的版本(
sudo apt remove openjdk-*
或sudo yum remove java-*
),或者使用update-alternatives
来管理优先级。
排查问题时,要保持耐心,一步步地检查。就像侦探破案一样,从最可能的地方开始,缩小范围,最终总能找到症结所在。
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Linux下Java环境配置详解》文章吧,也可关注golang学习网公众号了解相关技术文章。

- 上一篇
- ChatGPT翻墙方法及国内访问教程

- 下一篇
- Win10声音图标无法点击解决方法
-
- 文章 · java教程 | 13分钟前 |
- Lombok注解处理器工作原理解析
- 295浏览 收藏
-
- 文章 · java教程 | 19分钟前 |
- Java线程池类型及使用场景解析
- 220浏览 收藏
-
- 文章 · java教程 | 26分钟前 |
- Java实现Zookeeper服务注册与发现方法
- 336浏览 收藏
-
- 文章 · java教程 | 37分钟前 |
- Java集成FFmpeg处理视频流教程
- 275浏览 收藏
-
- 文章 · java教程 | 43分钟前 |
- Java反射与动态代理实用技巧解析
- 389浏览 收藏
-
- 文章 · java教程 | 48分钟前 |
- Java类是什么?面向对象核心概念详解
- 291浏览 收藏
-
- 文章 · java教程 | 1小时前 |
- MAT工具使用:Java堆内存分析全攻略
- 105浏览 收藏
-
- 文章 · java教程 | 1小时前 |
- Java连接InfluxDB教程详解
- 430浏览 收藏
-
- 文章 · java教程 | 1小时前 | 异步处理 松耦合 Spring事件监听 ApplicationEvent ApplicationListener
- Spring事件监听的实战应用解析
- 353浏览 收藏
-
- 文章 · java教程 | 1小时前 | 性能 jdbc 批量操作 PreparedStatement addBatch
- JavaJDBC批量操作怎么用,优势有哪些?
- 416浏览 收藏
-
- 文章 · java教程 | 1小时前 |
- Java数组与算法常见应用解析
- 155浏览 收藏
-
- 文章 · java教程 | 1小时前 |
- Java循环变量累积问题与重置方法
- 490浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 509次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 边界AI平台
- 探索AI边界平台,领先的智能AI对话、写作与画图生成工具。高效便捷,满足多样化需求。立即体验!
- 37次使用
-
- 免费AI认证证书
- 科大讯飞AI大学堂推出免费大模型工程师认证,助力您掌握AI技能,提升职场竞争力。体系化学习,实战项目,权威认证,助您成为企业级大模型应用人才。
- 65次使用
-
- 茅茅虫AIGC检测
- 茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
- 183次使用
-
- 赛林匹克平台(Challympics)
- 探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
- 265次使用
-
- 笔格AIPPT
- SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
- 204次使用
-
- 提升Java功能开发效率的有力工具:微服务架构
- 2023-10-06 501浏览
-
- 掌握Java海康SDK二次开发的必备技巧
- 2023-10-01 501浏览
-
- 如何使用java实现桶排序算法
- 2023-10-03 501浏览
-
- Java开发实战经验:如何优化开发逻辑
- 2023-10-31 501浏览
-
- 如何使用Java中的Math.max()方法比较两个数的大小?
- 2023-11-18 501浏览