在CentOS上安装JDK,推荐手动下载OpenJDK LTS版本(如17或21)的.tar.gz包,解压至/opt目录并创建软链接,通过配置/etc/profile.d/java.sh设置JAVA_HOME、PATH和CLASSPATH环境变量,最后验证java -version和echo $JAVA_HOME确认安装成功;版本管理推荐使用软链接切换或alternatives命令。

在CentOS系统上安装和配置Java开发环境(JDK),核心步骤通常包括下载合适的JDK包、解压到指定目录,然后配置系统环境变量。这个过程并不复杂,但一些细节处理得当,能让你的开发环境更稳定、更易于管理。对于大多数开发者来说,手动下载并配置一个特定版本的JDK,比如OpenJDK的某个LTS版本,是兼顾灵活性和稳定性的最佳实践。
解决方案
要在CentOS上搭建Java开发环境,我通常会选择手动下载JDK压缩包(
.tar.gz
文件),而不是直接使用
yum
安装系统自带的OpenJDK。原因很简单,手动安装能更好地控制JDK版本,避免系统更新带来的意外,也方便在不同项目间切换JDK版本。
以下是我通常的操作流程:
选择并下载JDK:首先,你需要决定使用哪个JDK版本。对于生产环境和长期项目,我倾向于选择LTS(长期支持)版本,比如OpenJDK 11、17或21。你可以从Adoptium (Temurin)、Oracle OpenJDK或者Red Hat OpenJDK等官方或可信赖的发行版网站下载对应的Linux x64
.tar.gz
压缩包。例如,我会去Adoptium下载最新的Temurin 17 LTS。
上传并解压JDK:将下载好的JDK压缩包上传到你的CentOS服务器。我习惯将其放在
/opt
目录下,这是一个用于存放可选应用软件的好地方。
# 假设你已经将jdk-17.0.x_linux-x64_bin.tar.gz上传到 /tmp 目录sudo mv /tmp/jdk-17.0.x_linux-x64_bin.tar.gz /opt/cd /optsudo tar -zxvf jdk-17.0.x_linux-x64_bin.tar.gz# 解压后通常会生成一个类似 jdk-17.0.x 的目录sudo rm jdk-17.0.x_linux-x64_bin.tar.gz # 清理安装包
为了方便管理,我有时会创建一个软链接,指向这个具体的JDK目录,这样以后升级JDK时,只需要更新软链接即可,而不用修改环境变量。
立即学习“Java免费学习笔记(深入)”;
sudo ln -s /opt/jdk-17.0.x /opt/java
这样,我的
JAVA_HOME
就可以指向
/opt/java
了。
配置环境变量:这是最关键的一步。为了让系统知道Java在哪里,你需要设置
JAVA_HOME
和
PATH
环境变量。我通常会在
/etc/profile.d/
目录下创建一个新的脚本文件,比如
java.sh
,这样系统启动时会自动加载,而且权限管理也更清晰。
sudo vi /etc/profile.d/java.sh
在
java.sh
中添加以下内容:
export JAVA_HOME=/opt/java # 替换为你的JDK实际路径或软链接export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
保存并退出。然后,让这些修改立即生效:
source /etc/profile.d/java.sh
或者,你也可以选择在当前用户的主目录下的
.bashrc
或
.bash_profile
中添加这些变量,这只会对当前用户生效。
验证安装:最后,确认JDK是否正确安装并配置。
java -versionjavac -versionecho $JAVA_HOME
如果能正确显示Java版本信息,并且
JAVA_HOME
输出你设置的路径,那么恭喜你,Java开发环境已经准备就绪了。
CentOS上安装JDK,我应该选择哪个版本?OpenJDK和Oracle JDK有什么区别?
选择JDK版本时,我个人会优先考虑项目的实际需求和社区支持。当前主流的JDK版本通常是LTS版本,比如JDK 8、11、17和21。对于新项目,我强烈推荐使用JDK 17或21,它们带来了许多性能优化和新特性,能让你的代码更现代、更高效。如果你的项目需要兼容旧系统或依赖库,JDK 8或11可能是更好的选择。
至于OpenJDK和Oracle JDK的区别,这其实是一个老生常谈的话题了,但每次讨论都很有意思。简单来说:
OpenJDK:这是一个开源项目,是Java平台的参考实现。它完全免费,可以自由使用和分发。许多公司和社区都基于OpenJDK提供自己的发行版,比如Adoptium (Temurin)、Red Hat OpenJDK、Amazon Corretto等。这些发行版通常会包含一些额外的补丁、性能优化和长期支持。对于绝大多数开发者和企业来说,OpenJDK发行版是完全足够且推荐的选择。Oracle JDK:这是Oracle公司官方维护和发布的JDK版本。从JDK 11开始,Oracle JDK的许可模式发生了变化,对于商业用途可能需要付费订阅。当然,Oracle也提供了免费的OpenJDK版本,但通常其商业支持和某些专有特性(比如Java Flight Recorder的一些高级功能)会捆绑在付费产品中。
我的观点是,除非你有非常特殊的理由(比如公司有Oracle的全面技术栈支持,或者需要Oracle JDK的某些独有特性),否则选择一个信誉良好的OpenJDK发行版是更明智、更经济的选择。它们在功能上与Oracle JDK几乎没有差异,性能也相差无几,而且社区活跃,更新及时。
配置JAVA_HOME和PATH环境变量,究竟怎么做才最规范?
规范地配置
JAVA_HOME
和
PATH
环境变量,不仅能确保Java命令在任何位置都能被识别,还能避免不同Java应用之间可能出现的版本冲突。我个人认为,最规范的做法是利用
/etc/profile.d/
目录,因为它提供了系统级的统一配置,并且易于管理。
JAVA_HOME
:这个变量指向你的JDK安装根目录。例如,如果你把JDK解压到了
/opt/jdk-17.0.x
,那么
JAVA_HOME
就应该设置为
/opt/jdk-17.0.x
。如果像我前面建议的,创建了一个软链接
/opt/java
指向实际的JDK目录,那么
JAVA_HOME
就设置为
/opt/java
。这样做的好处是,许多Java应用程序和构建工具(如Maven、Gradle)都会依赖
JAVA_HOME
来定位Java运行时。
PATH
:
PATH
环境变量告诉操作系统在哪些目录中查找可执行文件。你需要将
$JAVA_HOME/bin
添加到
PATH
中,这样你就可以直接在命令行中运行
java
、
javac
等命令,而不需要输入它们的完整路径。
export PATH=$JAVA_HOME/bin:$PATH
这里的
$PATH
是原有的
PATH
值,
$JAVA_HOME/bin
放在前面意味着系统会优先查找这个目录下的可执行文件。
CLASSPATH
(可选但推荐):
CLASSPATH
用于指定Java虚拟机(JVM)在查找类文件时需要搜索的路径。虽然现代Java开发工具(如Maven、Gradle)通常会自行管理类路径,但为了完整性,我还是会将其配置上,指向JDK的
lib
目录下的
dt.jar
和
tools.jar
,以及当前目录
.
。
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
为什么
/etc/profile.d/
是规范的选择?
帮衣帮-AI服装设计
AI服装设计神器,AI生成印花、虚拟试衣、面料替换
106 查看详情
系统级生效:在这个目录下创建的脚本会在所有用户登录时自动执行,确保所有用户都能访问到配置好的Java环境。模块化管理:每个服务或应用的环境变量可以独立存放在一个脚本文件中,便于查看、修改和删除,避免了修改
/etc/profile
这个核心文件的风险。权限清晰:这些文件通常由root用户创建和管理,符合系统管理规范。
当然,如果你只是为单个用户配置,那么修改用户主目录下的
.bashrc
或
.bash_profile
也是完全可以的。但对于服务器环境,我更推荐
/etc/profile.d/
。
CentOS系统里有多个JDK版本,我该如何管理和切换?
在开发过程中,遇到需要切换不同JDK版本的情况简直是家常便饭。比如,一个老项目需要JDK 8,而新项目则基于JDK 17。CentOS提供了
alternatives
命令来管理系统中的不同版本软件,但对我来说,有时候直接调整
JAVA_HOME
反而更灵活。
方法一:使用
alternatives
命令(系统级管理)
alternatives
是一个强大的工具,它允许你注册多个版本的软件,并设置一个默认的“提供者”。
注册新的JDK版本:假设你已经安装了JDK 8和JDK 17,并且它们分别在
/opt/java8
和
/opt/java17
。
sudo alternatives --install /usr/bin/java java /opt/java8/bin/java 1sudo alternatives --install /usr/bin/javac javac /opt/java8/bin/javac 1sudo alternatives --install /usr/bin/jar jar /opt/java8/bin/jar 1# ... 对其他Java工具(如javadoc, jconsole等)重复此操作sudo alternatives --install /usr/bin/java java /opt/java17/bin/java 2sudo alternatives --install /usr/bin/javac javac /opt/java17/bin/javac 2sudo alternatives --install /usr/bin/jar jar /opt/java17/bin/jar 2# 注意后面的数字是优先级,数字越大优先级越高
这里的
--install
参数后面跟着:
/usr/bin/java
:这是你希望创建的符号链接的路径。
java
:这是符号链接的名称。
/opt/java8/bin/java
:这是实际的可执行文件路径。
1
:这是一个优先级数字。
切换JDK版本:
sudo alternatives --config java
系统会列出所有已注册的Java版本,并让你选择一个数字来切换。
There are 2 programs which provide 'java'. Selection Command----------------------------------------------- 1 /opt/java8/bin/java*+ 2 /opt/java17/bin/javaEnter to keep the current selection[+], or type selection number:
输入你想要的版本对应的数字,回车即可。
方法二:通过调整
JAVA_HOME
和
PATH
(更灵活,我常用)
对于个人开发环境,我发现直接修改
JAVA_HOME
环境变量通常更直接、更灵活,尤其是在使用版本管理工具(如
asdf
或
sdkman
)时。
如果你没有使用
alternatives
,或者觉得它有点重,你可以:
在
/etc/profile.d/java.sh
中修改
JAVA_HOME
:直接编辑之前创建的
java.sh
文件,将
export JAVA_HOME=/opt/java
中的
/opt/java
修改为
/opt/java8
或
/opt/java17
,然后
source /etc/profile.d/java.sh
。这种方法需要root权限,并且会影响所有用户。
使用软链接切换(我的推荐):如果你之前创建了
/opt/java
这个软链接,那么切换起来就非常方便了。
# 切换到JDK 8sudo rm /opt/javasudo ln -s /opt/java8 /opt/javasource /etc/profile.d/java.sh # 重新加载环境变量# 切换到JDK 17sudo rm /opt/javasudo ln -s /opt/java17 /opt/javasource /etc/profile.d/java.sh # 重新加载环境变量
这种方式既直观又高效,避免了频繁修改配置文件,而且
JAVA_HOME
始终指向
/opt/java
,对应用程序是透明的。
用户级切换:如果你只希望在当前用户下切换JDK,可以在
~/.bashrc
或
~/.bash_profile
中设置
JAVA_HOME
。
# 在~/.bashrc中添加或修改export JAVA_HOME=/opt/java17export PATH=$JAVA_HOME/bin:$PATH
然后
source ~/.bashrc
。这种方法的好处是互不影响,每个用户可以有自己的Java环境。
总的来说,
alternatives
适合系统管理员在多用户环境下管理系统默认的Java版本。而对于单个开发者,特别是需要频繁切换的场景,通过软链接或者直接在用户配置文件中调整
JAVA_HOME
,通常会是更轻松、更符合直觉的选择。我个人更倾向于软链接的方式,它在系统级和用户级之间找到了一个很好的平衡点。
以上就是CentOS下怎么安装JDK_CentOS安装与配置Java开发环境教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/348309.html
微信扫一扫
支付宝扫一扫