Ubuntu: OpenJDK 8 - 无法找到软件包

137

我刚刚安装了Ubuntu,这是我第一次在Linux环境下工作,所以请容忍我的新手操作。

无论如何,我直接从Oracle下载了Java 8 JDK,但我知道也有一个针对Java 8的OpenJDK。我有两个问题。

  1. Oracle版本和OpenJDK之间有什么区别?优缺点是什么?

  2. 当我尝试获取OpenJDK 8时,我无法获取。我将终端命令和错误消息粘贴在这里,希望得到建议。再次说明,我非常新于Linux,在这个时候我使用的是我第一个Linux发行版不到一小时。

user@computer:~/Java$ sudo apt-get install openjdk-8-jdk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package openjdk-8-jdk

任何帮助都将不胜感激。与此同时,我只会使用Oracle包。谢谢。

编辑:

现在我有一个新问题。我安装了OpenJDK 7,它带有Maven,并且在我意识到我正在获得两个软件的时候安装了它。现在我有JDK 7、Eclipse和Maven,它们都可以工作,但是我卡在了JDK 7而不是8上。

我看到下面有一个链接,打算明天早上去看看,现在已经是凌晨2点了,我很累。如果有关于这个新问题的其他建议,将不胜感激,否则我肯定会第一时间查看那个链接。


1
http://packages.ubuntu.com/search?keywords=openjdk-8-jdk - Stephen C
你正在运行哪个版本的Ubuntu?最近几个版本都有将其作为安装选项提供。 - Makoto
Stephen的链接将解决您的问题 :) - Juned
谢谢。现在是凌晨两点,我要睡觉了,但我会在早上查看链接。我已经编辑了我的问题,并增加了一个额外的问题,如果你能帮忙看一下就太好了。如果现有的链接/答案也能帮助解决这个问题,我很抱歉现在太累了无法查看,我会在早上查看它。 - craigmiller160
我使用的是Ubuntu 14.10,我相信这是最近的长期支持版本。 - craigmiller160
13个回答

149

更新: 下面的安装过程无需 root 权限


我建议您不要在Ubuntu系统上手动安装软件包,如果已经有一个(半官方的)仓库可以解决您的问题。此外,为了避免(非常零星的)兼容性问题,请使用Oracle JDK进行开发(我很多年前就尝试过,现在肯定更好了)。
webupd8仓库添加到您的系统中:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

安装您喜欢的jdk版本(从java-6到java-9的版本可用):

sudo apt-get install oracle-java8-installer

您可以安装多个版本的JDK,混合使用OpenJDK和Oracle版本。 然后,您可以使用命令update-java-alternatives在已安装的版本之间进行切换:
# list available jdk
update-java-alternatives --list

# use jdk7
sudo update-java-alternatives --set java-7-oracle

# use jdk8
sudo update-java-alternatives --set java-8-oracle

要求

如果您收到add-apt-repository: command not found的错误,请确保已安装software-properties-common

sudo apt-get install software-properties-common

如果您正在使用旧版本的Ubuntu:

sudo apt-get install python-software-properties

无需root权限安装JDK

如果您没有目标机器上的管理员权限,您可以使用sdkman来安装经过认证的zulu openjdk:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java

注意: sdkman 允许安装官方的 Oracle JDK,虽然这不是默认选项。使用以下命令查看可用版本:

sdk ls java

使用以下命令安装所选版本:

sdk install java <version>

例如:

sdk install java 9.0.1-oracle

命令词汇表

  • sudo <command> [command_arguments]:以超级用户权限执行命令。

  • add-apt-repository <PPA_id>:Ubuntu(就像每个Debian衍生版和通常情况下的每个Linux发行版)有一个主要的软件包存储库,用于处理诸如软件包依赖关系和更新之类的事情。在Ubuntu中,可以使用PPA(个人软件包归档)扩展主要存储库,该存储库通常包含系统中不可用的软件包(例如Oracle JDK)或可用软件包的更新版本(例如:LTS中的LibreOffice 5仅通过此PPA可用)。

  • apt-get [install|update|upgrade|purge|...]:这是“the”命令行软件包处理程序,用于操纵系统上每个存储库的状态(安装/更新/升级可以视为更改存储库的当前状态)。

在我们的情况下,使用命令sudo add-apt-repository ppa:webupd8team/java,我们通知系统下一个仓库更新必须从webupd8仓库检索软件包信息。使用sudo apt-get update,我们实际上更新了系统仓库(所有这些操作都需要超级用户权限,因此我们在命令前加上sudo)。

sudo apt-get install oracle-java8-installer

  • update-java-alternativesupdate-alternatives的特定java版本):在Ubuntu中,多个软件包提供相同的功能(浏览互联网,编译邮件,编辑文本文件或提供java / javac可执行文件...)。为了允许系统在给定特定任务时选择用户偏爱的工具,使用/etc/alternatives/下的symlinks机制。尝试根据上面指示的方式更新jdk(在Java 7和Java 8之间切换),并查看此命令的输出如何更改:

    ls -l /etc/alternatives/java*

在我们的情况下: sudo update-java-alternatives --set java-8-oracle 更新 /etc/alternatives 下的符号链接,指向 java-8-oracle 可执行文件。
额外信息:
- man <command>: 使用 man 命令阅读关于 (几乎) 每个 shell 命令及其选项的详细说明。 (我在这篇简短回答中提到的每个命令都有一个 man 页面,可以尝试使用 man update-java-alternatives). - apt-cache search <search_key>: 查询 APT 缓存,搜索与所提供的 search_key 相关的软件包 (可以是软件包名称或软件包描述中的某个单词). - apt-cache show <package>: 提供特定软件包 (软件包版本、是否已安装、描述) 的 APT 信息.

1
问题是我收到了一条消息“无法找到软件包oracle-java8-installer”。当我尝试使用sudo apt-get命令获取openjdk 8时,同样的事情发生了。 - craigmiller160
3
值得注意的是,这至少被标记为Oracle商业版Java,而不是开放社区版本(OpenJRE)。 - ThorSummoner
2
这个答案无效 - Oracle 禁止直接下载 Java 安装程序。sudo apt-get install oracle-java8-installer 失败。 - Alec Istomin
2
我已经尝试解决这个问题4个小时了。感谢这个超棒的解决方案! - ickyrr
2
ppa:webupd8team/java已被停用,因此sudo apt-get install oracle-java8-installer无法工作。当您添加PPA时,您会收到以下消息:'Oracle Java下载现在需要登录Oracle帐户才能下载Java更新,例如最新的Oracle Java 8u211/Java SE 8u212。由于这个原因,我无法使用最新的Java更新PPA(旧的链接已被Oracle中断)。' - R Kiselev
显示剩余10条评论

134

就像你所看到的,我只安装了Java 1.7版本(在Ubuntu 14.04机器上)。

update-java-alternatives -l
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64

我安装Java 8时,采取了以下步骤:

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk

后来,现在我有Java 7和8版本。

update-java-alternatives -l
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1069 /usr/lib/jvm/java-1.8.0-openjdk-amd64

奖金已添加(如何在不同版本之间切换)

  • 从终端运行以下命令:

sudo update-alternatives --config java

There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1069      manual mode

Press enter to keep the current choice[*], or type selection number:
如您所见,我正在运行Open JDK 8。要切换到JDK 7,请按下1并按Enter键。使用sudo update-alternatives --config javac同样切换javac。检查版本以确认更改:java -versionjavac -version

2
非常有用,因为我不知道安装OpenJDK需要哪个repo!非常感谢。 - cram2208
@cram2208 很高兴能帮到你。感谢你的评论。 - samsamara
openjdk-r对于服务器来说安全吗? - Wang
1
感谢您详细的回答,这个解决方案对我来说完美地起作用了。 - Muddasir23
1
如果找不到“add-apt-repository”命令,请运行以下命令:sudo apt install software-properties-common - Sadhvik Chirunomula

18
sudo apt-get update
sudo apt-get  install openjdk-8-jdk

这应该可以工作


4
请说明这个补充对现有答案的贡献。 - Gert Arnold
我在Windows上使用WSL2,在安装OpenJDK之前忘记更新软件包,导致出现了相同的错误。@GertArnold,Zoe的答案帮助了我解决这个问题。 - pcdro
为什么这个答案在底部?我们能否点赞它让它上升到顶部呢;-) - jumping_monkey

14

我从官方的Debian软件库获取OpenJDK 8,而不是从一些随意的PPA或非免费的Oracle二进制文件中获取。以下是我的操作步骤:

sudo apt-get install debian-keyring debian-archive-keyring

创建/etc/apt/sources.list.d/debian-jessie-backports.list文件:

deb http://httpredir.debian.org/debian/ jessie-backports main

创建/etc/apt/preferences.d/debian-jessie-backports文件:

Package: *
Pin: release o=Debian,a=jessie-backports
Pin-Priority: -200

最后进行安装:

sudo apt-get update
sudo apt-get -t jessie-backports install openjdk-8-jdk

2
update-alternatives --config java ;-) 最后,最终。 - Javali
非常感谢!这是唯一对我有效的解决方案(Deb 8)。 - user1334546

13

我一直在网上寻找答案。我安装的是Debian 10服务器。

我在安装openjdk-8-jdk时遇到了相同的问题。使用apt install命令会显示package not found

这里的其他评论帮助你安装oracle jdk 8,但我想要使用openjdk 8。

我发现,在Debian 10中,默认情况下只能安装openjdk-11软件包而无需添加ppa,但在Debian 9(stretch)中,默认情况下,您可以安装openjdk-8软件包。因此,添加stretch Debian ppa允许我安装openjdk-8软件包。

添加Debian stretch ppa。

sudo apt-add-repository 'deb http://security.debian.org/debian-security stretch/updates main'

然后更新并安装openjdk-8-jdk。

sudo apt update && sudo apt install openjdk-8-jdk

7
我在 Ubuntu 和 Kali 上安装 openjdk-8-jdk 时遇到了同样的问题,但无法成功,后来发现该程序未列在存储库列表中。我通过添加 PPA(个人软件包存档,这些是非官方存储库)来解决它。
sudo apt update sudo apt install software-properties-common
sudo apt-add-repository 'deb http://security.debian.org/debian-security stretch/updates main'
sudo apt install openjdk-8-jdk

3

我遇到了同样的问题,尝试了本页面中的所有解决方案,但都没有起作用。

最终起作用的是将 universe 仓库添加到我的仓库列表中。为此,请运行以下命令:

sudo add-apt-repository universe

在运行了上述命令后,我能够运行

sudo apt install openjdk-8-jre

没有问题,软件包已安装。

希望这可以帮助一些人。


1
不确定为什么我的回答被踩了。如果有什么不正确或潜在的问题,请留下评论帮助其他人和我更好地理解。 - Daniel Black
在添加apt仓库时遇到了错误0.482:'universe'无效。 - undefined

2

运行以下命令...问题已解决 :)

sudo apt install software-properties-common -y

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update -y
sudo apt-get install openjdk-8-jdk -y

1

个人尝试了一堆这些解决方案,但都没有起作用,最终我找到了这个可行的方法。

sudo apt-add-repository 'deb http://security.debian.org/debian-security stretch/updates main'

然后安装OpenJDK 8。

sudo apt install openjdk-8-jdk


1

可能有点晚了,但是这个方法帮了我很多:

在Ubuntu上,搜索并点击软件和更新。会加载以下页面。确保您在可从互联网下载下勾选适当的框。如果未勾选这些框,则无法找到几个软件包。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接