问题描述
Ubuntu似乎比Sun JDK /JRE更喜欢OpenJDK /JRE。即使我安装了Sun JRE,JDK和插件并花了一些时间来删除OpenJDK-related软件包,apt-get已经安装了它们,并将一些软件包作为依赖项。是否可以更正此行为以支持Sun Java包?我想安装一个且只安装一个Java堆栈(是的,它有点像OCD,但我喜欢让我的系统干净)并希望它是Sun Java。
更新:正如Marcos Roriz所说,问题似乎是在default-jre(Java-dependent包用来依赖)指向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文件来查看内容应该是什么样子。备用机制可能会使用它来确定要创建的链接。我太阳包的头是。
name=java-6-sun-1.6.0.22
alias=java-6-sun
priority=63
section=non-free
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
的符号链接。
name=java-6-sun-1.6.0.22
alias=java-6-sun
priority=63
section=non-free
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
plugin xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
plugin 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
第五种办法
I added this line to the /etc/environment file: JAVA_HOME=”/usr/lib/jvm/jdk1.6.0_23″ and added JAVA_HOME/bin to the PATH variable, BUT the OS still doesn’t recognise the command java, says it’s not installed and offers me gcj and 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中的位置。
第六种办法
-
开放系统 – >管理 – > Synaptic Package Manager然后完全删除OpenJDK。
-
测试版本的Java在shell中输入
java -version
(它只显示Sun java) -
键入
sudo update-java-alternatives -l
-
你完成了现在你只安装了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
后面有各种文件和子目录,我在一个新目录中隔离。没有任何异常的影响,所以可能它只是一个剩余的残余物。
这给我留下了我直接从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机器上做的事情是
- add java-6-sun,
- remove openJDK (add sun Java first otherwise a bunch of things will be removed like tomcat, etc)
那对我来说没问题,不再有openJDK依赖
第九种办法
给出这个问题的答案对我不起作用。也就是说,以下失败:
sudo apt-get purge sun-java5-jre sun-java6-font sun-java6-jre
有错误:
Virtual packages like 'sun-java6-jre' can't be removed
-
搜索IcedTea。
-
如果已安装,请删除IcedTea Java Plug-in(
icedtea-6-jre-cacao
)。 -
选择OpenJDK Java 7 Runtime。
-
单击安装。
-
等待41.6 MB软件包下载并安装。
现在安装了OpenJDK(IcedTea),它应该允许您(如果有此错误)继续安装Oracle的JDK而不会出错。
也可以看看: