如何完全卸载Java?

如何完全删除系统中的所有Java痕迹?
我已经知道如果需要的话,可以如何安装它
9个回答

  1. 删除所有与Java相关的软件包(Sun、Oracle、OpenJDK、IcedTea插件、GIJ):

    dpkg-query -W -f='${binary:Package}\n' | grep -E -e '^(ia32-)?(sun|oracle)-java' -e '^openjdk-' -e '^icedtea' -e '^(default|gcj)-j(re|dk)' -e '^gcj-(.*)-j(re|dk)' -e '^java-common' | xargs sudo apt-get -y remove
    sudo apt-get -y autoremove
    
  2. 清除配置文件(注意,此命令还会删除libsgutils2-2和virtualbox的配置文件):

    dpkg -l | grep ^rc | awk '{print($2)}' | xargs sudo apt-get -y purge
    
  3. 删除Java的配置和缓存目录:

    sudo bash -c 'ls -d /home/*/.java' | xargs sudo rm -rf
    
  4. 删除手动安装的JVM:

    sudo rm -rf /usr/lib/jvm/*
    
  5. 从“alternatives”中删除Java条目(如果还有的话):

    for g in ControlPanel java java_vm javaws jcontrol jexec keytool mozilla-javaplugin.so orbd pack200 policytool rmid rmiregistry servertool tnameserv unpack200 appletviewer apt extcheck HtmlConverter idlj jar jarsigner javac javadoc javah javap jconsole jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc xulrunner-1.9-javaplugin.so; do sudo update-alternatives --remove-all $g; done
    
  6. 搜索可能剩余的Java目录:

    sudo updatedb
    sudo locate -b '\pack200'
    

    如果上述命令输出类似于/path/to/jre1.6.0_34/bin/pack200的内容,请删除其父目录,例如:sudo rm -rf /path/to/jre1.6.0_34


7你测试过这个答案吗?我相当确定你已经全都搞定了,但还是要再确认一下。 :) - Jorge Castro
15@JorgeCastro,没错。我一个接一个地构建了这些命令,然后将它们全部连接在一起,并在工作站的不同Java安装场景中运行了所有命令,以进行测试。我真的非常关注被管道传递到apt-get removegrep的输出,我认为它几乎涵盖了所有通过deb包进行安装的可能性。 - Eric Carvalho
5虽然所提供的命令序列在大多数情况下都有效,但我认为我的答案还需要一些改进。各位,请随意提出可以改善它的建议,比如更好地解释每个命令或指出未涵盖的场景。 - Eric Carvalho
4最近我发现了一个情况,即移除openjdk会导致其他Java软件包的安装。解决这个问题的方法是禁用所有仓库,然后执行移除命令。 - Anwar
1@EricCarvalho 当我执行命令 sudo bash -c 'ls -d /home/*/.java' | xargs sudo rm -rf 时,终端返回的响应是无效的。 - n00b
3@n00b 可能是因为你的主目录中没有 .java 文件夹。实际的错误信息是什么? - Eric Carvalho
1@EricCarvalho 实际的错误信息是:ls: 无法访问 /home/*/.java: 没有那个文件或目录 - n00b
@EricCarvalho,你能回答我之前发布的其他问题吗?如果你向下滚动这个页面,你会看到我的帖子开头是“我严格按照Eric Carvalho提供的步骤进行了操作”。谢谢。 - n00b
@n00b 别担心。该命令会删除 Java 配置目录(.java),如果存在的话。如果不存在,你会收到一个错误提示,没关系的。 - Eric Carvalho
@EricCarvalhoпЉЪжИСеПѓдї•иѓідљњзФ®дї•apt-cache search java | awk '{print($1)}' | grep -E -e '^(ia32-)?(sun|oracle)-java' -e....еЉАе§ізЪДеСљдї§жШѓйТИеѓє32дљНжУНдљЬз≥їзїЯзЪДеРЧпЉЯжИСеЃЙи£ЕдЇЖ64дљНжУНдљЬз≥їзїЯгАВзЫЄеЇФзЪДеСљдї§жШѓдїАдєИпЉЯи∞Ґи∞ҐгАВ - n00b
@EricCarvalho:命令sudo apt-get -y autoremove会删除我需要的许多其他软件包。忽略这个命令可以吗?或者你能提供一个“温和”一点的命令,只删除除了Java之外的软件包吗? - n00b
太棒了!非常感谢。我在将Oracle JDK 1.7设置为默认版本时遇到了困难,因为我并不需要OpenJDK。所以我把它们都移除了,然后安装了Oracle JDK 1.7。 - Ravindra S
太神奇了!这在我的Crunchbang 3.2.0-4-amd64上起作用了。 - pdoherty926
1嗯,不确定这是否是错误的原因,但突然在我运行这个时,在联想T440上使用Ubuntu 14时出现了http://askubuntu.com/questions/141606/how-to-fix-the-system-is-running-in-low-graphics-mode-error。 - bernie2436
1`$ sudo locate -b '\pack200'/usr/share/bash-completion/completions/pack200`我不应该删除这个。对吗? - Atiq Rahman
@AlexeyBobrick 这是因为JabRef依赖于Java。删除一个软件包将会删除所有依赖于它的软件包。 - Eric Carvalho
@EricCarvalho:啊哈,好的!我最初猜测只是因为jabref作为一个字符串与模式匹配。 - Alexey Bobrick
1apt-cache search java ... | xargs sudo apt-get -y remove 这个命令不幸地在我的机器上移除了libreoffice, libreoffice-java-common, libreoffice-sdbc-hsqldb(我使用的是Mint x64,运行的是Libreoffice 5.0.1)。 - direwolf
1除了环境变量,比如JAVA_HOME,也是一个好主意吗? 这些通常位于/etc/environment、/etc/profile、/etc/profile.d/*甚至/.bashrc、/.profile。 这取决于你的安装方式。我的在/etc/profile.d/jdk.sh中。 - Housni
1这样对吗?这些东西对我来说似乎没有关联:$ dpkg -l | grep ^rc | awk '{print($2)}'apt-show-versions liblcms1:armhf libpython2.7 libwnck22 libxres1:armhf python-support stunnel4``` - msouth
2你应该提到它可能会删除很多不相关的东西...我刚刚把我的Netbeans和许多其他应用程序都给卸载了,真是气死人了... - pzaj
我不得不稍微修改所有的xargs命令才能使其正常工作。在xargs之后,我添加了-I{},并在命令的末尾添加了{} 所以,例如,代替sudo bash -c 'ls -d /home/*/.java' | xargs sudo rm -rf,我运行sudo bash -c 'ls -d /home/*/.java' | xargs -I{} sudo rm -rf {} - mgershen
自动删除是一个值得尝试的好东西吗?据我所知,它会删除许多其他库,这可能最终会破坏Ubuntu系统。 - coder3521
我的最大问题竟然是“IBM J9 VM”。 卸载过程虽然难以识别,但很容易执行: sudo apt-get purge ibm-java...... (这里是sudo apt-get purge ibm-java80-jre)。 - opinion_no9
使用 find /*/*java* 命令查找剩余的内容。 - Rajan
1@Rajan然后通过sudo find /*/*java* | xargs rm -f删除其输出中列出的所有文件。 - Tms91

要完全删除Ubuntu 11.10上的OpenJDK(这在其他版本的Ubuntu上可能或可能不足够),请运行以下命令:
sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*

如果您想要移除Oracle(“Sun”)版的Java,您需要说明您是如何安装它的。如果您编辑问题并在本回答下留言指明此事,我会尽力提供关于如何移除该版本的信息。

2我尝试了上述方法,在Ubuntu 11上成功完成,但之后我仍然可以运行java -version命令,并返回openjdk版本"11.0.3" 2019-04-16。 - John Little

To uninstall Oracle Java 7, just press Ctrl+Alt+T on your keyboard to open Terminal. When it opens, run the command below.

sudo update-alternatives --display java

To check the setup before uninstalling Java.

Next, remove symlinks

(用你的Java版本替换掉(version)这个词。执行java -version命令来获取你的版本。所以如果你的版本是1.7.0_03,你应该输入sudo update-alternatives --remove "java" "/usr/lib/jvm/jdk1.7.0_03/bin/java"

sudo update-alternatives --remove "java" "/usr/lib/jvm/jdk<version>/bin/java"
sudo update-alternatives --remove "javac" "/usr/lib/jvm/jdk<version>/bin/javac"
sudo update-alternatives --remove "javaws" "/usr/lib/jvm/jdk<version>/bin/javaws"

verify that the symlinks were removed

java -version
javac -version
which javaws

The next 2 commands must be type excatly perfectly to avoid permanently destroying your system.

cd /usr/lib/jvm
sudo rm -rf jdk<version>

Then do

sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javaws

Then do

sudo vi  /etc/environment

Delete the line with JAVA_HOME 1



卸载OpenJDK(如果已安装)。首先检查已安装的OpenJDK软件包。
sudo dpkg --list | grep -i jdk

卸载OpenJDK:

sudo apt-get purge openjdk*

卸载与OpenJDK相关的软件包。
sudo apt-get purge icedtea-* openjdk-*

检查是否已删除所有OpenJDK软件包。
sudo dpkg --list | grep -i jdk

1Source:akbarahmed.com


你能不能也不要删除/usr/lib/jvm文件夹呢?据我所知,那个文件夹只被Java使用。 - njallam
我想你可以在那里加上,或者我可以帮你加上,如果你同意的话。 - Mitch

你可能不需要完全移除OpenJDK来解决你的问题。安装sun-java6软件包,然后使用update-java-alternatives命令切换到Sun Java软件包。
如果你确实想要完全移除OpenJDK,请删除default-jdk和/或default-jre软件包。你可能需要删除一些Java软件包,但是一旦安装了Sun JDK软件包,大多数软件包应该可以正常运行。
完成软件包的移除后,你可能希望参考其中一个清理提示

我已经执行了update-java-alternatives命令。应该提一下这个。我还执行了update-alternatives --config java命令。现在Chrome和Firefox告诉我我的Java插件被阻止了,因为它太旧了... - CaldwellYSR
使用--plugin选项运行update-java-alternatives命令,并将其设置回原始值。您可以使用此工具混合和匹配默认设置。安装在11.10版本中的浏览器可能需要sun-java7。 - BillThor

尝试这个命令:

java -version

如果出现1.6*,请尝试以下方法:
sudo apt-get autoremove openjdk-6-jre

如果出现1.7*,请尝试以下操作:
sudo apt-get autoremove openjdk-7-jre

假设您的系统中没有安装JDK。如果您已经安装,请使用以下命令:
sudo apt-get autoremove openjdk-`<version>`-jdk

用类似之前示例中的版本替换


更简单的方法是使用Synaptic。

点击"部分"标签页,向下滚动到Java。
只需选择每个带有绿色框的项目并标记为完全删除。
重复此操作以删除所有Java部分和文件。

只需要删除所有JDK或JRE的文件,例如通常安装在这个位置:

/usr/lib/jvm/java-7-oracle

所以以root权限删除"java-7-oracle"文件夹中的所有文件,并将最新的JDK或JRE文件解压到其中。这样你就会安装最新版本的Java了。

P.S. 你的目录名称可能与 java-7-oracle 不同。

参考:Oracle官方安装指南


同意Eliah的观点。"apt-get purge"命令可以彻底删除这些软件包。
假设您之前安装了java-6-sun软件包的副本,后续操作将有助于摆脱损坏的符号链接。
sudo update-alternatives --config java

然后选择一个正确的路径,将其作为默认的Java调用路径链接起来。
然后使用以下命令检查Java的版本:
java -version

使用JDK 18版本。
sudo apt-get autoremove openjdk-18-jdk