问题描述
所以我刚刚安装了Ubuntu,这是我第一次在Linux环境中工作,所以请耐心等待。
无论如何,我直接从Oracle下载了Java 8 JDK,但我知道也有一个适用于Java 8的OpenJDK。我有两个问题。
-
Oracle版本和OpenJDK有什么区别。优点缺点?
-
当我尝试获取OpenJDK 8时,我可以粘贴终端命令和我收到的错误消息’t. I’m,以期寻求建议。再说一次,对于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一起提供,并且在我意识到得到two-for-one交易之前就已经安装了。现在我有了JDK 7,Eclipse和Maven,它们都可以工作,但是我只能使用JDK 7而不是8。
我看到下面有一个链接,我打算早上检查一下,现在是凌晨2点,我现在很累。对于这个新问题的任何其他建议,将不胜感激,否则我肯定会在早上检查出该链接的第一件事。
最佳办法
更新:下面没有root特权的安装
我建议您不要在ubuntu系统上手动安装软件包,如果已经有(semi-official)存储库能够解决您的问题。此外,使用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|...]
:它是”the” 命令行软件包处理程序,用于处理系统上每个存储库的状态(安装/更新/升级可以看作是存储库当前状态的更改)。
在我们的示例中:使用命令sudo add-apt-repository ppa:webupd8team/java
,我们通知系统下一个存储库更新也必须从webupd8存储库中检索软件包信息。
使用sudo apt-get update
,我们实际上更新了系统存储库(所有这些操作都需要超级用户特权,因此我们在命令前添加sudo)。
sudo apt-get install oracle-java8-installer
-
update-java-alternatives(update-alternatives的特定Java版本):在Ubuntu中,几个软件包提供了相同的功能(浏览Internet,编译邮件,编辑文本文件或提供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 update-java-alternatives
)。 -
apt-cache
search <search_key>
:查询APT缓存以搜索与提供的search_key相关的软件包(可以是软件包名称或软件包描述中的某些单词)。 -
apt-cache
show <package>
:提供特定软件包的APT信息(软件包版本,是否安装,描述)。
次佳办法
如您所见,我仅安装了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,请按1
并按Enter
键。对javac
以及sudo update-alternatives --config javac
都执行相同的操作。
检查版本以确认更改:java -version
和javac -version
。
第三种办法
我从官方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
第四种办法
sudo apt-get update
sudo apt-get install openjdk-8-jdk
这应该工作
第五种办法
我遇到了同样的问题,并尝试了此页上的所有解决方案,但没有一个能解决问题。
最终有效的方法是将universe
存储库添加到我的存储库列表中。为此,请运行以下命令
sudo add-apt-repository universe
运行上面的命令后,我能够运行
sudo apt install openjdk-8-jre
没有问题,该软件包已安装。
希望这对某人有帮助。