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


49

Ubuntu似乎比Sun JDK / JRE更偏爱OpenJDK / JRE。即使在我安装了Sun JRE,JDK和插件并花了一些时间挑选与OpenJDK相关的软件包之后,apt-get仍将它们与某些软件包一起安装为依赖项。可以通过使用Sun Java软件包来纠正此行为吗?我想安装一个且唯一的Java堆栈(是的,这有点OCD,但是我希望系统干净),并希望它是Sun Java。

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


请任何人使用oracle jdk更新答案
。– LoveToCode

Answers:


35

在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

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

java -version

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

我还要指出的是,OpenJRE / JDK与2年前或3年前相比已有很长的路要走,当时OpenJRE / JDK的许多问题都可以通过改用Sun Java来解决。


11

我认为问题在于某些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开发人员(安装sdk和srcs):

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

并使用以下命令将其设置为默认程序:

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

1
是的,我相信这与default-jre有关。不,我真的不希望同时拥有Sun JDK和Open JDK-这就是要解决的问题-只拥有一个,而让它成为Sun JDK。有没有办法破解default-jre指向Sun JRE?
伊万(Ivan)

是的,default-jre今天晚上我将尝试重建软件包以指向sun-java。现在我在工作。
马科斯·罗里斯

6

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

名称= java-6-sun-1.6.0.22
别名= java-6-sun
优先级= 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之前。

手动安装时,我在中安装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 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
杰瑞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 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解压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 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

我没有安装任何Java,所以没有与此相关的任何东西,没有安装任何东西,没有.jinfo文件等。我自己创建了usr / lib / jvm文件夹,因为我读到它是默认安装的位置,并且我将保持这种方式。这就是为什么我想查看Sun JDK的.jinfo文件的完整内容的原因。
jurchiks,2011年

我已经添加了完整的sun .jinfo文件。
BillThor 2011年

6

删除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 

2
在此之后,您根本就不用Java了……问题实际上是指谁用另一个替换另一个,而不是如何从系统中删除OpenJDK。在您的答案中添加更多信息,仅通过执行以下步骤就不能回答问题。
布鲁诺·佩雷拉

4

我将这一行添加到/ etc / environment文件中:JAVA_HOME =“ / usr / lib / jvm / jdk1.6.0_23”并将JAVA_HOME / bin添加到PATH变量,但是OS仍然无法识别命令java,它没有安装,并提供给我gcj和openjdk。

你检查了吗?

echo $JAVA_HOME 
echo $PATH

如果不需要它:以突触或使用apt-get卸载openjdk和gcj。

apt-get remove gcj 
apt-get remove openjdk

然后,我将禁止使用Java,并且主要按照BillThor的建议进行操作,为什么我要给他投票。

which javac
which java

应该指向您安装Java的位置以及在PATH中找到它的位置。


我没有安装gcj或openjdk ...只是尝试了which命令,它什么也没打印。发现我忘记了PATH中的JAVA_HOME变量之前的$符号,现在我将重新启动并查看其过程。
jurchiks,2011年

重新启动PC,但which命令仍然不显示任何内容。JAVA_HOME和PATH变量均正确:echo $ JAVA_HOME /usr/lib/jvm/jdk1.6.0_23 echo $ PATH $ JAVA_HOME / bin:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games哪里可能出问题了?编辑:天哪,为什么注释中没有换行符?
jurchiks

a)不需要重启PC。重新打开外壳程序就足够了,或者通常以用户身份重新登录。b)查看帮助中的注释格式。我看到了,echo $PATH $JAVA_HOME/bin:/usr/local/sbin...但结果必须对$ JAVA_HOME进行评估-发生了错误,或者您的报告有误。c)换行符:它们不在那儿,所以我们总是太早按ENTER键,然后时钟滴答作响,因为只允许编辑几分钟,所以我不断地进入陷阱。我讨厌它!:)
用户未知,

好吧,JAVA_HOME变量位于同一文件(/ etc / environment)中,仅在第一行中。也许应该在其他地方?当我键入时,它会识别出来echo $JAVA_HOME...
jurchiks,2011年

我的问题是:是否echo $PATH打印$JAVA_HOME...或打印JAVA_HOME的值,即:/usr/lib/jvm/jdk1.6.0_23
用户未知

3
  1. 打开系统->管理-> Synaptic软件包管理器,然后完全删除OpenJDK。
  2. java -version在shell中键入Java的测试版本(它将仅显示Sun Java)
  3. 类型 sudo update-java-alternatives -l
  4. 你完成了。现在,您仅安装了sun java,并将其设置为默认jdk

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


2

使用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,里面包含各种文件和子目录,我将其隔离在一个新目录中。没有任何异常影响,因此大概只是剩余的残留物。

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


2

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

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

那对我来说很好,不再需要openJDK依赖项


java-6-sun不是ubuntu-default-package还是它?
Fabian Zeindl 2012年

2

这个问题的答案对我不起作用。即,以下失败:

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-6-jre-cacao如果已安装,请删除IcedTea Java插件()。
  4. 选择OpenJDK Java 7 Runtime。
  5. 单击安装。
  6. 等待41.6 MB的软件包下载并安装。

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

也可以看看:


1

首先:删除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插件libnpjp2.so文件的符号链接:

   cd  

<Firefox>/plugins


 ln -s  

<JRE>/lib/i386/libnpjp2.so .

希望这可以帮助。


在cp之后和链接之前,您没有错过任何一个步骤吗?并且:您建议手动链接,但是java / bin中有45个文件,其中大多数是可执行文件。您想建立25个符号链接吗?我希望更改PATH。
用户未知,

据我所知,步骤是正确的。您可以参考sun(oracle)Java安装页面上的教程。以上步骤对我有用!让我知道你的相处。
Ubuntuser 2011年
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.