如何正确删除 OpenJDK/OpenJRE 并将 SunJDK/SunJRE 设置为默认值

如何正确删除 OpenJDK/OpenJRE 并将 SunJDK/SunJRE 设置为默认值

Ubuntu 似乎更倾向于使用 OpenJDK/JRE,而不是 Sun JDK/JRE。即使在我安装了 Sun JRE、JDK 和插件并花了一些时间挑选出与 OpenJDK 相关的软件包之后,apt-get 还是将它们重新安装,并将一些软件包作为依赖项。是否可以纠正此行为以支持 Sun Java 软件包?我想安装一个且只有一个 Java 堆栈(是的,这有点强迫症,但我希望我的系统干净)并且希望它是 Sun Java。

更新:正如 Marcos Roriz 所指出的,问题似乎出在指向 OpenJDK 的 default-jre(依赖于 Java 的软件包所依赖的),因此问题似乎是关于如何破解 default-jre/default-jdk 以指向 Sun Java。

答案1

在旧版本的 Ubuntu(9.10 及以下版本)上安装 Sun Java

我记得大约三年前使用 Ubuntu 8.04 时也遇到过同样的问题。使用 openjre 时出现了一个奇怪的问题,使用 sun jre 版本解决了这个问题。以下是适用于 10.04 以下版本的终端步骤,因为从 10.04 开始 sun java 已被删除并由 openjre 取代:

sudo apt-get remove openjdk-6-jre default-jre default-jre-headless

sudo apt-get install sun-java6-jre sun-java6-bin sun-java6-plugin sun-java6-fonts

(与 Sun Java 相关的一切。只是为了确保)

之后,如果您删除了 openjdk,那么您将只剩下 sun java。如果您没有删除它,那么您将同时拥有它们两个。要从一个更改为另一个,请执行以下操作:

sudo update-java-alternatives -l- 这将显示您可以使用的 Java 引擎列表。

java 替代方案的名称是左侧的名称,例如 openjdk 将显示如下:

java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk

你可以像这样将系统设置为 openjdk:

sudo update-java-alternatives -s java-6-openjdk

如果您想使用 Sun,那么您可以这样做(安装 sun 软件包之后):

sudo update-java-alternatives -s java-6-sun

如果您想使用 Java 7 版本,只需将上面提到的数字 6 更改为 7。例如,如果我想安装 OpenJre 版本 7,我会:

sudo apt-get install openjdk-7-jre default-jre default-jre-headless

在较新版本的 Ubuntu(10.04 及以上版本)上安装 Sun Java

打开终端并输入以下内容:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update   
sudo apt-get upgrade   
sudo apt-get install oracle-java7-installer

这样应该会在您的系统上安装 Sun Java 版本。如果您有其他 Java 替代方案,只需执行以下操作即可进行更改:

sudo update-java-alternatives -s java-7-oracle  

如果您希望自动安装,请输入以下内容:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections

之后只需执行以下操作即可设置默认环境变量:

sudo apt-get install oracle-java7-set-default

请注意,PPA 包含版本 6、7 和 8。因此,您只需更改安装行中的数字即可安装其中任何一个,例如:

sudo apt-get install oracle-java8-installer

将安装 Java 8。安装您想要使用的 Java 版本并使用命令将版本设置为默认值后update-java-alternatives,您可以通过输入以下命令来检查您正在使用的版本:

java -version

它将显示您当前正在使用的默认版本。

我还想说一下,OpenJRE/JDK 与 2 或 3 年前相比已经有了长足的进步,当时它存在许多问题,通过改用 Sun Java 已经得到了解决。

答案2

我认为问题在于某些 Java 包依赖于指向 openjdk-jre 的 default-jre。我认为没有简单的方法可以永久卸载 openjdk。问题是,当您安装 java 包/程序时,您可能会再次遇到 openjdk。

但是如果您愿意同时拥有两者,那么将 java 运行时程序(java、javah、javap 等)设置为 sun 实现是否容易呢?请执行以下操作:

sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts

或者如果你是 Java 开发人员(安装 sdk 和 srcs):

sudo apt-get install sun-java6-jdk sun-java6-jre sun-java6-source

并将其设置为默认程序:

sudo update-java-alternatives -s java-6-sun

答案3

.jdk1.6.0_23.jinfo文件应是所提供程序及其路径的列表。有一个描述性标题,后面跟着一个空白行。然后是三个字段格式的程序列表:条目类型 (jre/jkd/plugin);程序名称;和路径。您应该有一些 jinfo 文件,您可以使用它们来查看内容应该是什么样子。替代机制可能会使用它来确定要创建哪些链接。我的 Sun 软件包的头部是。

名称=java-6-sun-1.6.0.22
别名=java-6-sun
优先级=63
部分=非自由

jre 控制面板 /usr/lib/jvm/java-6-sun/jre/bin/ControlPanel
jre java /usr/lib/jvm/java-6-sun/jre/bin/java
jre java_vm /usr/lib/jvm/java-6-sun/jre/bin/java_vm

如果您想覆盖默认的 Java 命令而不使用替代机制,请将 Java 路径放在路径中的 /usr/bin 前面。

当进行手动安装时,我将 Java 安装到 中/opt。对于您的安装,我将安装在 中/opt/jdk1.6.0_23。然后,我将路径$JAVA_HOME/bin放在变量的开头PATH

编辑:这是整个 Sun 文件。注意.java-6-sun.jinfo是 的符号链接.java-6-sun-1.6.0.22.jinfo

名称=java-6-sun-1.6.0.22
别名=java-6-sun
优先级=63
部分=非自由

jre 控制面板 /usr/lib/jvm/java-6-sun/jre/bin/ControlPanel
jre java /usr/lib/jvm/java-6-sun/jre/bin/java
jre java_vm /usr/lib/jvm/java-6-sun/jre/bin/java_vm
jre javaws /usr/lib/jvm/java-6-sun/jre/bin/javaws
jre jcontrol /usr/lib/jvm/java-6-sun/jre/bin/jcontrol
jre 密钥工具 /usr/lib/jvm/java-6-sun/jre/bin/keytool
jre pack200 /usr/lib/jvm/java-6-sun/jre/bin/pack200
jre 策略工具 /usr/lib/jvm/java-6-sun/jre/bin/policytool
jre rmid /usr/lib/jvm/java-6-sun/jre/bin/rmid
jre rmiregistry /usr/lib/jvm/java-6-sun/jre/bin/rmiregistry
jre 解包200 /usr/lib/jvm/java-6-sun/jre/bin/unpack200
jre orbd /usr/lib/jvm/java-6-sun/jre/bin/orbd
jre 服务器工具 /usr/lib/jvm/java-6-sun/jre/bin/servertool
jre tnameserv /usr/lib/jvm/java-6-sun/jre/bin/tnameserv
jre jexec /usr/lib/jvm/java-6-sun/jre/lib/jexec
jdk HtmlConverter /usr/lib/jvm/java-6-sun/bin/HtmlConverter
jdk 小程序查看器 /usr/lib/jvm/java-6-sun/bin/appletviewer
jdk apt /usr/lib/jvm/java-6-sun/bin/apt
jdk extcheck /usr/lib/jvm/java-6-sun/bin/extcheck
jdk idlj /usr/lib/jvm/java-6-sun/bin/idlj
jdk jar /usr/lib/jvm/java-6-sun/bin/jar
jdk jarsigner /usr/lib/jvm/java-6-sun/bin/jarsigner
jdk javac /usr/lib/jvm/java-6-sun/bin/javac
jdk javadoc /usr/lib/jvm/java-6-sun/bin/javadoc
jdk javah /usr/lib/jvm/java-6-sun/bin/javah
jdk javap /usr/lib/jvm/java-6-sun/bin/javap
jdk jconsole /usr/lib/jvm/java-6-sun/bin/jconsole
jdk jdb /usr/lib/jvm/java-6-sun/bin/jdb
jdk jhat /usr/lib/jvm/java-6-sun/bin/jhat
jdk jinfo /usr/lib/jvm/java-6-sun/bin/jinfo
jdk jmap /usr/lib/jvm/java-6-sun/bin/jmap
jdk jps /usr/lib/jvm/java-6-sun/bin/jps
jdk jrunscript /usr/lib/jvm/java-6-sun/bin/jrunscript
jdk jsadebugd /usr/lib/jvm/java-6-sun/bin/jsadebugd
jdk jstack /usr/lib/jvm/java-6-sun/bin/jstack
jdk jstat /usr/lib/jvm/java-6-sun/bin/jstat
jdk jstatd /usr/lib/jvm/java-6-sun/bin/jstatd
jdk native2ascii /usr/lib/jvm/java-6-sun/bin/native2ascii
jdk rmic /usr/lib/jvm/java-6-sun/bin/rmic
jdk schemagen /usr/lib/jvm/java-6-sun/bin/schemagen
jdk 串行器 /usr/lib/jvm/java-6-sun/bin/serialver
jdk wsgen /usr/lib/jvm/java-6-sun/bin/wsgen
jdk wsimport /usr/lib/jvm/java-6-sun/bin/wsimport
jdk xjc /usr/lib/jvm/java-6-sun/bin/xjc
插件 xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
插件 mozilla-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so

答案4

我在 /etc/environment 文件中添加了此行:JAVA_HOME="/usr/lib/jvm/jdk1.6.0_23",并将 JAVA_HOME/bin 添加到 PATH 变量,但操作系统仍然无法识别命令 java,说它未安装并提供 gcj 和 openjdk。

你檢查了嗎?

echo $JAVA_HOME 
echo $PATH

如果您不需要它:在 synaptic 中或使用 apt-get 卸载 openjdk 和 gcj。

apt-get remove gcj 
apt-get remove openjdk

那么我将禁止使用 Java 作为替代方案,并且主要按照 BillThor 的建议去做,这就是我给他投赞成票的原因。

which javac
which java

应该指向您安装 java 的位置,以及它在 PATH 中的位置。

相关内容