Ubuntu:OpenJDK 8 - 无法找到包

use*_*059 80 java linux ubuntu

所以我刚刚安装了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
    
    Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.与此同时,我将使用Oracle软件包.谢谢.

编辑:

所以,现在我遇到了一个新问题.我安装了OpenJDK 7,它与Maven一起安装,刚刚安装之前我意识到我正在进行一对一的交易.现在我有JDK 7,Eclipse和Maven,他们都在工作,但我坚持使用JDK 7而不是8.

我看到下面有一个链接,我打算早上检查一下,凌晨2点,我现在累了.对这个新问题的任何其他建议将不胜感激,否则我肯定会在早上检查该链接.

Giu*_*ero 109

更新:下面没有root权限的安装


如果已经有一个(半官方)存储库能够解决您的问题,我建议您不要在ubuntu系统上手动安装软件包.此外,使用Oracle JDK进行开发,只是为了避免(非常零星的)兼容性问题(我多年前尝试过,现在肯定更好).

webupd8 repo 添加到您的系统:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

安装首选版本的jdk(从java-6到java-9的版本可用):

sudo apt-get install oracle-java8-installer
Run Code Online (Sandbox Code Playgroud)

您还可以安装多个版本的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
Run Code Online (Sandbox Code Playgroud)

要求

如果你add-apt-repository: command not found确定已software-properties-common安装:

sudo apt-get install software-properties-common
Run Code Online (Sandbox Code Playgroud)

如果您使用的是旧版Ubuntu:

sudo apt-get install python-software-properties
Run Code Online (Sandbox Code Playgroud)

没有root权限的JDK安装

如果您没有目标计算机的管理员权限,最简单的方法是使用sdkman安装zulu认证的openjdk:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java
Run Code Online (Sandbox Code Playgroud)

注意:sdkman允许安装官方Oracle JDK,尽管它不是默认选项.查看可用版本:

sdk ls java
Run Code Online (Sandbox Code Playgroud)

安装所选版本:

sdk install java <version>
Run Code Online (Sandbox Code Playgroud)

例如:

sdk install java 9.0.1-oracle
Run Code Online (Sandbox Code Playgroud)

命令词汇表

  • 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 repo检索包信息.

随着sudo apt-get update我们实际更新系统信息库(所有这些操作需要超级用户权限,所以我们预先准备须藤的命令).

sudo apt-get install oracle-java8-installer

  • update-java-alternatives(特定的java版本的update-alternatives):在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商业版的Java,而不是开放社区版本(openjre). (2认同)
  • 此答案无效 - oracle 禁止直接下载 java 安装程序。sudo apt-get install oracle-java8-installer 失败 (2认同)
  • 我一直试图解决这个问题4个小时了.谢谢你这个很棒的解决方案! (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 破坏)。'* (2认同)

sam*_*ara 87

如你所见,我只安装了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
Run Code Online (Sandbox Code Playgroud)

要安装Java 8,我做到了,

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
Run Code Online (Sandbox Code Playgroud)

之后,现在我有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
Run Code Online (Sandbox Code Playgroud)

BONUS ADDED(如何在不同版本之间切换)

  • 从终端运行以下命令:

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:
Run Code Online (Sandbox Code Playgroud)

正如你可以看到我跑开放JDK 8以切换到JDK 7,按1和命中Enter关键.做同样的事情javac,和sudo update-alternatives --config javac.

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

  • 非常有用,因为我不知道安装 OpenJDK 需要哪个 repo!非常感谢。 (2认同)

Han*_*ner 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
Run Code Online (Sandbox Code Playgroud)

制作/etc/apt/preferences.d/debian-jessie-backports:

Package: *
Pin: release o=Debian,a=jessie-backports
Pin-Priority: -200
Run Code Online (Sandbox Code Playgroud)

然后最后做安装:

sudo apt-get update
sudo apt-get -t jessie-backports install openjdk-8-jdk
Run Code Online (Sandbox Code Playgroud)

  • 最后是 `update-alternatives --config java ;-)` (2认同)

小智 13

我一直在互联网上寻找这方面的答案。我安装了 Debian 10 服务器。

我在安装 openjdk-8-jdk 时遇到了同样的问题。结果apt installpackage not found.

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

我发现,对于 Debian 10,默认情况下,只有 openjdk-11 软件包可以在不添加 ppa 的情况下安装,但是对于 Debian 9(stretch),默认情况下,您可以安装 openjdk-8 软件包。因此,添加stretch Debian ppa 允许我安装openjdk-8 软件包。

添加 Debian 扩展 ppa。

sudo apt-add-repository 'deb http://security.debian.org/debian-security stretch/updates main'
Run Code Online (Sandbox Code Playgroud)

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

sudo apt update && sudo apt install openjdk-8-jdk
Run Code Online (Sandbox Code Playgroud)


小智 7

openjdk-8-jdk我在 ubuntu 和 kali 上安装时遇到同样的问题 ,但失败了,然后我发现程序未在存储库列表中列出,所以我通过添加 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


小智 6

sudo apt-get update
sudo apt-get  install openjdk-8-jdk
Run Code Online (Sandbox Code Playgroud)

这应该有效

  • 请在现有答案中添加解释。 (2认同)