在Debian 9上使用Apt安装Java的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
介绍
Java 和 JVM(Java 虚拟机)是许多软件的必备组件,包括 Tomcat、Jetty、Glassfish、Cassandra 和 Jenkins。
在本指南中,您将使用 apt
安装各种版本的 Java 运行环境(JRE)和 Java 开发工具包(JDK)。您将安装 OpenJDK 以及来自 Oracle 的官方软件包。然后,您将选择要在项目中使用的版本。完成后,您将能够使用 JDK 开发软件或使用 Java 运行时来运行软件。
先决条件
要按照本教程操作,您需要:
- 通过遵循 Debian 9 初始服务器设置指南教程设置的一个 Debian 9 服务器,包括一个具有
sudo
访问权限和防火墙的非根用户。
安装默认的 JRE/JDK
安装 Java 的最简单选项是使用 Debian 打包的版本。默认情况下,Debian 9 包含 OpenJDK,这是 JRE 和 JDK 的开源变体。
此软件包将安装兼容 Java 8 的 OpenJDK 版本 1.8。Java 8 是当前的长期支持版本,尽管公共维护将于 2019 年 1 月结束,但仍得到广泛支持。
要安装此版本,首先更新软件包索引:
sudo apt update
接下来,检查 Java 是否已安装:
java -version
如果 Java 尚未安装,您将看到以下输出:
-bash: java: command not found
执行以下命令以安装 OpenJDK:
sudo apt install default-jre
此命令将安装 Java 运行环境(JRE)。这将允许您运行几乎所有的 Java 软件。
使用以下命令验证安装:
java -version
您将看到以下输出:
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-1~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
您可能需要 Java 开发工具包(JDK)以及 JRE,以便编译和运行一些特定的基于 Java 的软件。要安装 JDK,请执行以下命令,该命令还将安装 JRE:
sudo apt install default-jdk
通过检查 Java 编译器 javac
的版本来验证 JDK 是否已安装:
javac -version
您将看到以下输出:
javac 1.8.0_181
接下来,让我们看看如何安装 Oracle 的官方 JDK 和 JRE。
安装 Oracle JDK
如果您想安装由 Oracle 分发的官方版本 Oracle JDK,您需要为您想要使用的版本添加一个新的软件包存储库。
首先,安装 software-properties-common
软件包,该软件包添加了 apt-get-repository
命令,您将使用该命令将额外的存储库添加到您的源列表中。
使用以下命令安装 software-properties-common
:
sudo apt install software-properties-common
安装了此软件包后,您可以安装 Oracle 的 Java。
安装 Oracle Java 8
要安装 Java 8,即当前的长期支持版本,首先添加其软件包存储库:
sudo add-apt-repository ppa:webupd8team/java
当您添加存储库时,您将看到如下消息:
[secondary_label output]Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK8). There are no actual Java files in this PPA.Important -> Why Oracle Java 7 And 6 Installers No Longer Work: http://www.webupd8.org/2017/06/why-oracle-java-7-and-6-installers-no.htmlUpdate: Oracle Java 9 has reached end of life: http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.htmlThe PPA supports Ubuntu 18.04, 17.10, 16.04, 14.04 and 12.04.More info (and Ubuntu installation instructions):
- for Oracle Java 8: http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.htmlDebian installation instructions:
- Oracle Java 8: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.htmlFor Oracle Java 10, see a different PPA: https://www.linuxuprising.com/2018/04/install-oracle-java-10-in-ubuntu-or.htmlMore info: https://launchpad.net/~webupd8team/+archive/ubuntu/java
Press [ENTER] to continue or ctrl-c to cancel adding it
按下 ENTER
继续。它将尝试导入一些 GPG 签名密钥,但它将无法找到任何有效的密钥:
gpg: keybox '/tmp/tmpgt9wdvth/pubring.gpg' created
gpg: /tmp/tmpgt9wdvth/trustdb.gpg: trustdb created
gpg: key C2518248EEA14886: public key "Launchpad VLC" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1
gpg: no valid OpenPGP data found.
执行以下命令手动为存储库源添加 GPG 密钥:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C2518248EEA14886
然后更新您的软件包列表:
sudo apt update
软件包列表更新后,安装 Java 8:
sudo apt install oracle-java8-installer
您的系统将从 Oracle 下载 JDK,并要求您接受许可协议。接受协议后,JDK 将安装。
安装 Oracle Java 10
要安装 Oracle Java 10,首先添加其软件源:
sudo add-apt-repository ppa:linuxuprising/java
你会看到以下消息:
Oracle Java 10 安装程序由于许可问题,Java 二进制文件不托管在此 PPA 中。该 PPA 中的软件包会下载并安装 Oracle Java 10(JDK 10),因此需要一个可用的互联网连接。此 PPA 中的软件包基于 WebUpd8 Oracle Java PPA 软件包:https://launchpad.net/~webupd8team/+archive/ubuntu/java为 https://www.linuxuprising.com/ 的用户创建问题或建议?在此处留下评论:https://www.linuxuprising.com/2018/04/install-oracle-java-10-in-ubuntu-or.html更多信息:https://launchpad.net/~linuxuprising/+archive/ubuntu/java
按 [ENTER] 继续或按 ctrl-c 取消添加
按下 ENTER
键继续安装。与 Java 8 一样,你会看到关于无效签名密钥的消息:
gpg: keybox '/tmp/tmpvuqsh9ui/pubring.gpg' created
gpg: /tmp/tmpvuqsh9ui/trustdb.gpg: trustdb created
gpg: key EA8CACC073C3DB2A: public key "Launchpad PPA for Linux Uprising" imported
gpg: Total number processed: 1
gpg: imported: 1
gpg: no valid OpenPGP data found.
执行以下命令导入必要的密钥:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EA8CACC073C3DB2A
然后更新软件包列表:
sudo apt update
软件包列表更新后,安装 Java 10:
sudo apt install oracle-java10-installer
系统将从 Oracle 下载 JDK,并要求你接受许可协议。接受协议后,JDK 将安装。
现在让我们看看如何选择要使用的 Java 版本。
管理 Java
你可以在一个服务器上安装多个 Java 版本。你可以使用 update-alternatives
命令配置命令行上的默认版本。
sudo update-alternatives --config java
如果你在本教程中安装了所有 Java 版本,输出将如下所示:
There are 3 choices for the alternative java (providing /usr/bin/java).Selection Path Priority Status
------------------------------------------------------------0 /usr/lib/jvm/java-10-oracle/bin/java 1091 auto mode
* 1 /usr/lib/jvm/java-10-oracle/bin/java 1091 manual mode2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode3 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual modePress <enter> to keep the current choice[*], or type selection number:
选择与要使用的 Java 版本相关联的数字,以将其用作默认版本,或按 ENTER
保留当前设置。
你还可以对其他 Java 命令执行此命令,例如编译器(javac
):
sudo update-alternatives --config javac
可以对其他命令运行此命令,例如 keytool
、javadoc
和 jarsigner
。
接下来让我们设置 JAVA_HOME
环境变量。
设置 JAVA_HOME
环境变量
许多使用 Java 编写的程序使用 JAVA_HOME
环境变量来确定 Java 安装位置。
要设置此环境变量,首先确定 Java 安装位置。再次使用 update-alternatives
命令:
sudo update-alternatives --config java
此命令显示每个 Java 安装以及其安装路径:
Selection Path Priority Status
------------------------------------------------------------0 /usr/lib/jvm/java-10-oracle/bin/java 1091 auto mode
* 1 /usr/lib/jvm/java-10-oracle/bin/java 1091 manual mode2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode3 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
在这种情况下,安装路径如下:
- Oracle Java 10 位于
/usr/lib/jvm/java-10-oracle/jre/bin/java
。 - Oracle Java 8 位于
/usr/lib/jvm/java-8-oracle/jre/bin/java
。 - OpenJDK 8 位于
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
。
这些路径显示了 java
可执行文件的路径。
复制你首选安装的路径,不包括末尾的 bin/java
部分。然后使用 nano
或你喜欢的文本编辑器打开 /etc/environment
:
sudo nano /etc/environment
在文件末尾添加以下行,确保用你自己复制的路径替换高亮显示的路径:
JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre"
修改此文件将为系统上的所有用户设置 JAVA_HOME
路径。
保存文件并退出编辑器。
现在重新加载此文件以将更改应用于当前会话:
source /etc/environment
验证环境变量是否已设置:
echo $JAVA_HOME
你将看到你刚刚设置的路径:
/usr/lib/jvm/java-8-oracle/jre
其他用户需要执行命令 source /etc/environment
或注销并重新登录以应用此设置。
结论
在本教程中,您安装了多个版本的Java,并学会了如何管理它们。现在,您可以安装在Java上运行的软件,比如Tomcat、Jetty、Glassfish、Cassandra或Jenkins。
相关文章:
在Debian 9上使用Apt安装Java的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 Java 和 JVM(Java 虚拟机)是许多软件的必备组件,包括 Tomcat、Jetty、Glassfish、Cassandra 和…...

人工智能在网络安全中的三大支柱
人工智能 (AI) 席卷了网络安全行业,各种供应商都在努力将 AI 融入其解决方案中。但 AI 与安全之间的关系不仅仅在于实现 AI 功能,还在于攻击者和防御者如何利用该技术改变现代威胁形势。它还涉及如何开发、更新和保护这些 AI 模型。如今,网络…...
rk3568mpp终端学习笔记
RK3568Terminal封装MppGraph 通过脚本取和设置音量/zigsun/bin/linux/bin.debug.Linux.rk3568/get_record_voice_value.sh /zigsun/bin/linux/bin.debug.Linux.rk3568/set_record_voice_value.sh class RK3568Terminal : public IAVLinkManager, p…...

【C++继承】赋值兼容转换作用域派生类的默认成员函数
1.继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类(或子类)。继承呈现了面向对象程序设计的层次结构…...

HTML5+JavaScript绘制彩虹和云朵
HTML5JavaScript绘制彩虹和云朵 彩虹,简称虹,是气象中的一种光学现象,当太阳光照射到半空中的水滴,光线被折射及反射,在天空上形成拱形的七彩光谱,由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…...
MySQL——单表查询(二)按条件查询(2)带 IN 关键字的查询
IN 关键字用于判断某个字段的值是否在指定集合中,如果字段的值在集合中,则满足条件,该字段所在的记录将被查询出来。其语法格式如下所示: SELECT *|字段名 1,字段名 2,… FROM 表名 WHERE 字段名 [NOT〕IN(元素 1,元素 2,…) 在上…...
【mysql】mysql 用户管理---创建、权限管理等等
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...

本地服务器物理机中redis设置、取消密码
1.服务器物理机上redis的操作【服务器中操作】 (1)首先先看一下当前运行中的redis实例: [rootiZuf67k70ucx14s6zcv54dZ var]# ps aux | grep redis-server因为我这里有两个实例在运行,即物理机上的redis和docker中的redis&…...

关于xilinx的FFTIP的使用和仿真
工具:vivado2018.3,modelsim10.6d 场景:在进行数据进行频谱分析的时候,使用FPGA来完成FFT的计算可以加快数据的计算速度。 下面使用仿真完成DDS产生的数据的FFT以及IFFT。原始数据使用DDSIP产生,通过IP产生的波形数据…...

ant design pro 如何去保存颜色
上图 就是实现这样的效果 后端是这样的,这个颜色肯定是存到字符串里的 这是第一步 import mongoose, { Schema, Document } from mongoose;interface IDiscountCard extends Document {title: string;subtitle: string;image: string;shopUrl: string;bgColor: s…...

【Hadoop】建立圈内组件的宏观认识
01存储02计算03调度04其他05回忆 众多组件们构建了大规模分布式计算和存储平台。本文介绍Hadoop生态圈中各个组件的主要功能和作用,辅助学者理解每个组件的定位和用途,从而建立对圈内组件的宏观认识。梳理清楚HDFS、MapReduce、YARN、Hive、HBase、Spark…...

C++:命名空间与输入输出
目录 前言 一、命名空间 1.1 namespace的价值 1.2 namespace的定义 1.3 命名空间的使用 二、C输入&输出 前言 C是一种面向对象的计算机程序设计语言,它扩展了C语言的功能,并引入了面向对象编程的概念,如类、继承和多态等&a…...

Azure DevOps Server 数据库日志已满,TF30042: The database is full
Contents 1. 问题描述2. 处理方式 2.1 系统备份2.2 收缩日志2.3 恢复模式2.4 日志增长无法控制 1. 问题描述 Azure DevOps Server 作为微软的软件开发管理平台产品,理所当然地使用了微软的数据库软件SQL Server。 在一个大型的开发团队中,Azure DevOps S…...
[C#]OpenCvSharp 实现Bitmap和Mat的格式相互转换
//转为 bitmap方法一: Bitmap map OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat); process_pictureBox.Image map; //转为 bitmap方法二: Bitmap map new Bitmap(mat.ToMemoryStream()); process_pictureBox.Image map; //Image img 转为…...
【区块链+金融服务】基于区块链的供应链金融系统 | FISCO BCOS应用案例
传统供应链金融存在着信息不对称、信任问题和繁琐流程等弊端。为了解决这些问题,京北方搭建了基于区块链 的供应链金融系统,提供了更高效、透明、安全和可信的交易环境。 系 统 采 用 FISCO BCOS 为 底 层 链, 技 术 栈 使 用 Java 语 言 进…...

AI语言大模型商业价值深度解析
点击蓝字 关注我 随着人工智能(AI)技术的飞速发展,特别是深度学习算法的进步,AI语言大模型在自然语言处理领域的表现日益突出。国内外多种语言大模型如:OpenAi 的 ChatGpt,阿里通义千问,百度文心…...
理解DDD领域驱动设计思想
一、引言 在软件开发的广袤领域中,领域驱动设计(Domain-Driven Design,简称 DDD)犹如一颗璀璨的明星,备受瞩目。对于期望运用 DDD 开展项目的研发人员而言,明晰 DDD 的本质是实现其有效应用的基石。需注意…...

音频剪辑软件哪个好用?五大音频剪辑软件分享
如果你正打算在家自学视频制作,那么恭喜你,你已经踏上了一段充满魔法与惊喜的旅程!不过,别忘了,视频的灵魂不仅仅在于画面,更在于那直击心灵的音效。 想象一下,一个精心剪辑的片段,…...

12.2 使用prometheus-sdk向pushgateway打点
本节重点介绍 : 使用golang sdk打prometheus4种指标,推送到pushgateway gauge、counter、histogram、summary的初始化4种类似的设置值的方法推送到pushgateway的方法 prometheus配置采集pushgateway,grafana上配大盘 golang-sdk 项目地址 https://git…...
HTTPS 详解
HTTPS 是以安全为目标的 HTTP 通道,它在 HTTP 中加入 SSL 层以提高数据传输的安全性。HTTP 被用于在 Web 浏览器和网站服务器之间传递信息,但以明文形式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...