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


95

所以我刚刚安装了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点,现在我很累。对于这个新问题的任何其他建议,将不胜感激,否则,我肯定会在早上检查出该链接的第一件事。



您正在运行哪个版本的Ubuntu?最新的几个版本已将其作为安装选项提供。
Makoto 2015年

Stephen的链接将解决您的问题:)
2015年6

谢谢。现在是凌晨2点,所以我要去睡觉,但是我会在早上检查链接。我为问题添加了一个编辑,并附加了一个问题,如果您可以仔细查看,那就太好了。如果现有的链接/答案也能帮助您解决此问题,我为您太累而无法立即查看它表示歉意,我将在早上进行检查。
user2223059

我相信我在Ubuntu 14.10上。不管最新的长期版本是什么。
user2223059 2015年

Answers:


121

更新:下面没有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(个人软件包存档)扩展主存储库,该PPA通常包含系统中不可用的软件包(就像oracle jdk)或可用软件包的更新版本(例如:LTS中的LibreOffice 5仅可通过此方法获得)PPA)。

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

在我们的案例中:使用命令,sudo add-apt-repository ppa:webupd8team/java我们通知系统下一个存储库更新也必须从webupd8存储库中检索软件包信息。

随着sudo apt-get update我们实际更新系统存储库(所有这些操作都需要超级用户特权,因此我们在命令前添加sudo)。

sudo apt-get install oracle-java8-installer

  • 更新Java的替代品(一个特定的Java版本的更新替代品):在Ubuntu几个包提供相同的功能(浏览互联网,电子邮件编译,编辑文本文件或提供的Java / javac的可执行文件...)。为了允许系统在给定特定任务的情况下选择用户收藏夹工具,使用了使用下面的符号链接的机制/etc/alternatives/。尝试如上所述更新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 update-java-alternatives)。

  • apt-cache search <search_key>:查询APT缓存以搜索与提供的search_key相关的软件包(可以是软件包名称或软件包描述中的某些单词)。

  • apt-cache show <package>:提供特定软件包的APT信息(软件包版本,是否安装,描述)。


问题是我收到消息“无法找到软件包oracle-java8-installer”。当我尝试使用sudo apt-get命令获取openjdk 8时,也会发生同样的事情。
user2223059

2
值得注意的是,这是(至少标记为)Oracle商业版本的Java,而不是开放社区版本(openjre)。
ThorSummoner

1
@basZero:似乎您需要安装软件属性:apt-get install software-properties-common。因此,我将更新该帖子以包括此要求。谢谢
Giuseppe Ricupero

1
此答案无效-oracle禁止直接下载Java安装程序。sudo apt-get install oracle-java8-installer失败
Alec Istomin

2
我已经尝试解决这个问题已有4个小时了。感谢您提供的出色解决方案!
ickyrr

108

如您所见,我仅安装了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

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

  • 从终端运行follwing命令:

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:

如您所见,我正在运行打开的jdk8。要切换到jdk 7,请按1Enter按键。用同样的方法javac也有,sudo update-alternatives --config javac

检查版本以确认更改:java -versionjavac -version


2
非常有用,因为我不知道安装OpenJDK需要哪个存储库!非常感谢。
cram2208 '16

@ cram2208很高兴对您有所帮助。感谢您的评论。
samsamara

openjdk -r对服务器足够安全吗?
王俊

感谢您提供详细的答案,此解决方案非常适合我。
Muddasir23

@ Muddasir23很高兴这很有帮助!
samsamara

13

我从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

1
最终决赛 update-alternatives --config java ;-)
Javali

非常感谢!这是唯一对我

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

这应该工作


请添加说明,这将增加现有答案。
Gert Arnold

我从Windows使用WSL2,但在安装OpenJDK之前忘了更新软件包,并得到了相同的错误。@GertArnold,在这种情况下,佐伊的回答对我有所帮助。
pcdro

0

我遇到了同样的问题,并尝试了此页面上的所有解决方案,但没有一个能解决问题。

最终可行的是将universe仓库添加到我的仓库清单中。为此,请运行以下命令

sudo add-apt-repository universe

运行上面的命令后,我能够运行

sudo apt install openjdk-8-jre

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

希望这对某人有帮助。


不知道为什么我对这个答案不满意。如果有任何不正确或潜在的问题,请发表评论以帮助他人和我自己更好地理解。
丹尼尔·布莱克

0

添加存储JDK库后,在安装之前,您可能需要先运行更新,以便可以运行添加存储库 apt update

然后继续安装 sudo apt install adoptopenjdk-8-hotspot

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.