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

Ubuntu似乎比Sun JDK / JRE更喜欢OpenJDK / JRE。 即使在我安装了Sun JRE,JDK和插件并花了一些时间来推出与OpenJDK相关的软件包之后,apt-get也将它们作为依赖项安装了一些软件包。 是否可以更正此行为以支持Sun Java包? 我想安装一个且只安装Java堆栈(是的,它有点强迫症 ,但我喜欢让我的系统干净)并且希望它是Sun Java。

更新:正如Marcos Roriz指出的那样,问题似乎是在default-jre(依赖于Java的程序包依赖)依赖于指向OpenJDK,因此问题似乎是如何破解default-jre / default-jdk指向到Sun Java。

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

大约三年前我曾经遇到过与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那么你会这样做(安装太阳包后):

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

如果你想使用java 7版本,只需更改上面提到的数字7为7。例如,如果我想安装openjre版本7,我会:

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

在较新版本的Ubuntu上安装Sun Java(上面是10.04)

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

 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来解决。

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

但是如果你愿意同时拥有这两者,那么将java运行时程序(java,javah,javap等)设置为sun实现是否容易。 这样做:

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

或者如果你是一个java dev(安装sdk和srcs):

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

并将其设置为默认程序:

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

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

 名称= java的6-太阳1.6.0.22
别名= java的6-太阳
优先级= 63
节=非自由

 jre ControlPanel / 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之前。

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

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

 名称= java的6-太阳1.6.0.22
别名= java的6-太阳
优先级= 63
节=非自由

 jre ControlPanel / 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 keytool / usr / lib / jvm / java-6-sun / jre / bin / keytool
 jre pack200 / usr / lib / jvm / java-6-sun / jre / bin / pack200
 jre policytool / 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 unpack200 / usr / lib / jvm / java-6-sun / jre / bin / unpack200
 jre orbd / usr / lib / jvm / java-6-sun / jre / bin / orbd
 jre servertool / 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 appletviewer / 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 serialver / 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 

删除openjdk和icedtea:

 apt-get purge openjdk-\* icedtea-\* icedtea6-\* 

将以下内容添加到/etc/apt/sources.list

 deb http://ppa.launchpad.net/webupd8team/java/ubuntu YOUR_UBUNTU_VERSION_HERE main 

安装Sun / Oracle JRE或JDK:

 apt-get install oracle-jdk7-installer apt-get install oracle-java7-installer 

我将此行添加到/ 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所说,为什么我给了他一个upvote。

 which javac which java 

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

  1. 打开System-> Administration-> Synaptic Package Manager,然后完全删除OpenJDK。
  2. 在shell中测试Java类型java -version测试版本(它只显示Sun java)
  3. 输入sudo update-java-alternatives -l
  4. 你完成了 现在你只安装了sun java,并将其设置为默认的jdk

并且它只有在你安装了两个jdk并且你想将sun-java设置为默认环境时才有效

使用Ubuntu 10.10,似乎你需要先在Synaptic中标记删除libaccess-bridge-java,然后标记openjdk-6-jre-headless。

我最终得到了一个要删除的列表:

ca-certificates-java,icedtea-6-jre-cacao,libaccess-bridge-java,libaccess-bridge-java-jni,openjdk-6-jre,openjdk-6-jre-headless,openjdk-6-jre-lib。

这工作但它留下了一个目录/etc/java-6-openjdk ,其中包含各种文件和子目录,我将其隔离在一个新目录中。 没有任何exception的影响,所以可能它只是一个剩余的残余物。

这给我留下了我直接从Java网站下载的Java。 但是,尽管已将其设置为默认值并创建指向Firefox插件目录的链接,但它不再起作用。 安装sun-java6-jre及其关联的软件包gsfonts-x11,odbcinst,odbcinst1debian2,sun-java6-bin和unixodbc,通过Synaptic,看到Java插件再次开始工作。 删除插件目录中的链接并将其替换为实际的libnpjp2.so文件不起作用。 使用通过Synaptic安装的Java中的ns7或ns7-gcc29目录中的libjavaplugin_oji.so文件的链接也不起作用。 这告诉我,要在Firefox中获取最新的Java插件,可以按照Java网站上的说明进行操作,并且运行下载的Java需要运行已下载的Java的集成Linux Java,然后依赖于它的操作。一旦插件被激活,它周围的文件。 虽然需要完全理解包含Java和Linux的代码才能真正解决它的谜团,但也许这些实验有助于找到在这种情况下可能需要两个Java的原因。 至少有可能删除所有Java,如果有人发现这样做有用。

我在新的Ubuntu 10.10机器上做的事情是

  • 添加java-6-sun,
  • 删除openJDK(首先添加sun Java,否则将删除一堆像tomcat一样的东西等)

那对我来说没问题,不再有openJDK依赖

给出这个问题的答案对我不起作用。 也就是说,以下失败:

 sudo apt-get purge sun-java5-jre sun-java6-font sun-java6-jre 

有错误:

 Virtual packages like 'sun-java6-jre' can't be removed 

请尝试以下说明 :

  1. 打开Ubuntu软件中心 。
  2. 搜索IcedTea。
  3. 如果已安装,请删除IcedTea Java Plug-in( icedtea-6-jre-cacao )。
  4. 选择OpenJDK Java 7 Runtime。
  5. 单击安装。
  6. 等待41.6 MB软件包下载并安装。

现在安装了OpenJDK(IcedTea),它应该允许您(如果有此错误)继续安装Oracle的JDK而不会出错。

也可以看看:

  • 官方文件
  • 如何安装Sun / Oracle专有的Java JDK 6/7/8或JRE?
  • 如何安装Oracle Java JDK 7?

首先:删除openjdk和icedtea插件。

 sudo apt-get remove openjdk* icedtea* 

第二步:将.bin jdk文件复制到/ opt或/ usr / java并解压缩。

 sudo cp jdk_1.16.0.bin /usr/java 

第三:将java文件的链接放到/ usr / bin /

 ln -s /usr/java/jdk_1.6.0/bin/java /usr/bin/java ln -s /usr/java/jdk_1.6.0/bin/javac /usr/bin/javac 

使用update-alternatives更新替代方案

在Firefox插件目录中创建指向Java插件的符号链接。

在Firefox插件目录中创建指向Java Plugin libnpjp2.so文件的符号链接:

  cd /plugins ln -s /lib/i386/libnpjp2.so . 

希望这可以帮助。