如何在一台服务器上同时运行搭载JDK 8, JDK 17, 和 JDK 21的项目:终极指南

🐯 如何在一台服务器上同时运行搭载JDK 8, JDK 17, 和 JDK 21的项目:终极指南 🚀

摘要

在企业开发环境中,常常需要在同一台服务器上运行使用不同Java开发工具包(JDK)版本的多个项目。本文详细介绍如何在Linux服务器(以Ubuntu 20.04为例)上同时安装并配置JDK 8, JDK 17, 和JDK 21,使得不同的Java应用可以并存并运行,无需干扰。从下载JDK到配置独立的运行环境,本文涵盖了全方位的步骤,旨在为各水平层次的开发者提供帮助。掌握本文内容后,您将能确保新老项目在同一硬件资源上高效共存。

引言

猫头虎的粉丝们,当您的服务器需要同时支持运行基于不同Java版本的项目时,单纯的JDK安装并不足够。不同的项目可能因为历史遗留问题或利用最新Java特性的需要而要求运行在特定版本的Java环境上。本文将指导您如何在Ubuntu 20.04服务器上同时配置和运行搭载JDK 8, JDK 17, 和JDK 21的Java应用,确保它们能在同一服务器上和谐共存。

正文

在这里插入图片描述

📘 安装前的准备

系统要求
  • 操作系统:Ubuntu 20.04 LTS
  • 架构:x86_64(AMD64)
  • 用户权限:具有sudo权限的用户账户
工具和资源
  • wget:从命令行下载文件的工具
  • tar:解压缩文件的工具

📗 安装和配置JDK

1. 下载JDK
# JDK 8
需要手动下载 https://download.oracle.com/java/8/archive/jdk-8u401-linux-x64.tar.gz
# JDK 17
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
# JDK 21
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
2. 解压JDK
# JDK 8
sudo tar -xzvf jdk-8u401-linux-x64.tar.gz -C /usr/lib/jvm/
sudo mv /usr/lib/jvm/jdk1.8.0_401 /usr/lib/jvm/jdk-8# JDK 17
sudo tar -xzvf jdk-17_linux-x64_bin.tar.gz -C /usr/lib/jvm/
sudo mv /usr/lib/jvm/jdk-17.0 /usr/lib/jvm/jdk-17# JDK 21
sudo tar -xzvf jdk-21_linux-x64_bin.tar.gz -C /usr/lib/jvm/
sudo mv /usr/lib/jvm/jdk-21.0 /usr/lib/jvm/jdk-21
3. 配置系统环境

使用update-alternatives设置和管理不同版本的Java命令。

# JDK 8
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-8/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-8/bin/javac 1# JDK 17
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 2
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17/bin/javac 2# JDK 21
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-21/bin/java 3
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-21/bin/javac 3
4. 项目配置

为每个项目设置独立的JAVA_HOME。在每个项目的启动脚本中定义使用的JDK版本。

Project using JDK 8:

export JAVA_HOME=/usr/lib/jvm/jdk-8
export PATH=$JAVA_HOME/bin:$PATH

Project using JDK 17:

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

Project using JDK 21:

export JAVA_HOME=/usr/lib/jvm/jdk-21
export PATH=$JAVA_HOME/bin:$PATH

📘 管理和维护

使用update-alternatives --config javaupdate-alternatives --config javac命令轻松切换系统默认的Java版本,支持不同开发环境的需求。

📙 常见问题解答 (QA)

Q1: 如果我需要所有项目同时运行怎么办?
A1: 通过为每个项目设置独立的JAVA_HOME环境变量,每个项目可以独立运行在不同的Java版本上。

Q2: 如何确保不同版本的Java不会相互干扰?
A2: 各个Java版本独立安装在不同目录,并通过环境变量指定每个项目所用的具体版本,因此它们不会相互干扰。

📘 小结

通过本指南,您可以在单一服务器上灵活管理多个Java版本,确保新旧项目的平稳运行。正确配置环境变量和使用update-alternatives工具是关键步骤。

总结

在技术多变的今天,能够在同一台服务器上支持多版本Java运行环境,对于节省资源、提升效率、保证项目稳定运行具有重要意义。利用本文提供的方法,您可以轻松实现这一目标。

未来展望

随着Java的进一步发展,新的版本将继续推出。服务器上的Java环境配置将更加灵活和高效,以支持更广泛的应用场景和更复杂的项目需求。

温馨提示

如果对本文有任何疑问,欢迎点击下方名片,了解更多详细信息!我们猫头虎科技博客始终致力于与您分享最新、最实用的技术资讯。🌟


猫头虎科技,一起学习,共同进步! 🚀🚀🚀

联系方式:CSDN 猫头虎

欢迎关注和交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/637717.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app 如何添加模拟器

uni-app 如何添加模拟器 使用微信开发者工具运行微信小程序使用 HBuilderX 内置模拟器使用第三方 Android 模拟器 下载并安装:配置环境:连接模拟器: 总结 有哪些可以使用的安卓模拟器软件 uni-app 如何添加模拟器 Uni-App 是一个基于 Vue.js…

Golang那些违背直觉的编程陷阱

目录 知识点1:切片拷贝之后都是同一个元素 知识点2:方法集合决定接口实现,类型方法集合是接口方法集合的超集则认定为实现接口,否则未实现接口 切片拷贝之后都是同一个元素 package mainimport ("encoding/json"&quo…

Redis入门到通关之数据结构解析-Dict

文章目录 概述构成Dict的扩容Dict的rehash总结 概述 我们知道Redis是一个键值型(Key-Value Pair)的数据库,我们可以根据键实现快速的增删改查。而键与值的映射关系正是通过Dict来实现的。 Dict由三部分组成,分别是:哈…

从头开始构建自己的 GPT 大型语言模型

图片来源: Tatev Aslanyan 一、说明 我们将使用 PyTorch 从头开始构建生成式 AI、大型语言模型——包括嵌入、位置编码、多头自注意、残差连接、层归一化,Baby GPT 是一个探索性项目,旨在逐步构建类似 GPT 的语言模型。在这个项目中&#xff…

Microchip 32位MCU CAN驱动图文教程-附源码

文章目录 创建一个新的32位MCU工程Microchip MCC Harmony配置界面说明在MCC下配置系统的时钟在MCC下配置所需要使用的模块配置调试打印模块配置CAN模块配置管脚功能修改系统堆栈大小生成代码 添加用户代码 创建一个新的32位MCU工程 确保电脑上已经安装最新的MPlab X IDE、XC32编…

C# WPF布局

布局&#xff1a; 1、Grid: <Window x:Class"WpfApp2.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d"http://schemas.microsoft.com…

matplotlib从起点出发(15)_Tutorial_15_blitting

0 位图传输技术与快速渲染 Blitting&#xff0c;即位图传输、块传输技术是栅格图形化中的标准技术。在Matplotlib的上下文中&#xff0c;该技术可用于&#xff08;大幅度&#xff09;提高交互式图形的性能。例如&#xff0c;动画和小部件模块在内部使用位图传输。在这里&#…

Drive Scope for Mac:硬盘健康监测分析工具

Drive Scope for Mac是一款专为Mac用户设计的硬盘健康监测与分析工具&#xff0c;致力于保障用户的数据安全。这款软件功能强大且操作简便&#xff0c;能够实时检测硬盘的各项指标&#xff0c;帮助用户及时发现并解决潜在问题。 Drive Scope for Mac 1.2.23注册激活版下载 Driv…

智慧化转型赋能园区创新:科技创新引领产业智慧化,打造高效发展新格局

在全球化和信息化浪潮的推动下&#xff0c;园区作为区域经济发展的重要引擎&#xff0c;正面临着前所未有的机遇与挑战。为应对这些挑战并把握机遇&#xff0c;园区需积极拥抱智慧化转型&#xff0c;通过科技创新引领产业智慧化&#xff0c;打造高效发展的新格局。本文将深入探…

设计模式之观察者模式(优先使用对象组合的原则)的C++实现

观察者模式又称订阅者发布者模式&#xff0c;本篇介绍主要是利用对象组合大于类继承的设计模式原则实现订阅发布模式&#xff0c;这种设计的优点是想订阅数据的类不需要继承订阅者类的抽象类&#xff0c;减少了一层类的继承&#xff1b;当然&#xff0c;具体情况需要可根据需求…

【Hadoop】- MapReduce YARN的部署[8]

目录 一、部署说明 二、集群规划 三、MapReduce配置文件 四、YARN配置文件 五、分发配置文件 六、集群启动命令 七、查看YARN的WEB UI 页面 一、部署说明 Hadoop HDFS分布式文件系统&#xff0c;我们会启动&#xff1a; NameNode进程作为管理节点DataNode进程作为工作节…

分类神经网络3:DenseNet模型复现

目录 DenseNet网络架构 DenseNet部分实现代码 DenseNet网络架构 论文原址&#xff1a;https://arxiv.org/pdf/1608.06993.pdf 稠密连接神经网络&#xff08;DenseNet&#xff09;实质上是ResNet的进阶模型&#xff08;了解ResNet模型请点击&#xff09;&#xff0c;二者均是…