Java 如何在我的操作系统上找到所有现有的JDK?

Java 如何在我的操作系统上找到所有现有的JDK?,java,Java,我想知道是否有可能在我的操作系统上找到所有安装的JDK 让我们假设它是一个基于Debian的发行版。我想找到任何正在使用、下载或安装但未处于活动状态的JDK。我想要所有可以使用的JDK 我需要包括有人更改包名的情况。我认为唯一的解决方案是在整个文件系统中搜索特定的jdk部分 我知道我可以找到所有使用jps-m或ps aux | grep java运行的java进程 如果我想找到已安装的JDK,我可以使用updatealternations-config java 但是也有可能找到只下载但未安装的

我想知道是否有可能在我的操作系统上找到所有安装的JDK

让我们假设它是一个基于Debian的发行版。我想找到任何正在使用、下载或安装但未处于活动状态的JDK。我想要所有可以使用的JDK

我需要包括有人更改包名的情况。我认为唯一的解决方案是在整个文件系统中搜索特定的jdk部分

我知道我可以找到所有使用jps-m或ps aux | grep java运行的java进程

如果我想找到已安装的JDK,我可以使用updatealternations-config java

但是也有可能找到只下载但未安装的JDK吗


在我看来,最特殊的情况是,有人将JDK解包,然后将其打包成.tar、.zip等格式,而不做任何更改。

查找所有JDK文件夹(无论它们在哪里)的一种快速而肮脏的方法是只搜索文件javac,它将出现在任何JDK的bin/文件夹中。在Linux上,您可以从根目录尝试:

sudo find . -name 'javac'

这种方法应该只找到JDK,而不是JRE,后者没有编译功能。您可以在其他操作系统(如Windows)上执行类似的过程。

在命令行上尝试以下操作:

which java

这可能取决于操作系统。因此,下载但未安装是指.deb文件或安装程序位于users~/Downloads目录中吗?或者你的意思是将完整的JDK解包到某个子目录中?在任何一种情况下,我都很确定,没有一条直截了当的道路。对于第二个,您可以对任何名为java的文件进行强制搜索,该文件具有可执行权限集。我想,这会找到大多数JDK,并且几乎没有误报。一个模糊问题的全面解决方案有点牵强。您应该指定是要查找过去的版本,还是尚未解包的版本,或者同时查找这两个版本。真正的解决方案很大程度上取决于您希望通过此搜索获得的普遍阅读:荒谬。您可以创建一个已知包名和二进制文件的完整集合,并系统地搜索它们,这会为用户命名约定和输入错误创建一个误差范围。您也可以选择模糊搜索,这将成倍地增加错误率,因为它缺少确定的参数,毫无疑问将返回JRE和其他Java项。@DominikMaciejewski您最好能为曾经存在的每个JDK包和二进制文件编译一个完整的校验和列表,然后尝试验证文件系统中的每个文件,对于部分下载和丢失的文件仍然存在一定的误差。我猜如果它们以非root用户的身份运行,它们只会对查找非root用户可见的JDK感兴趣,所以我个人会放弃sudo。是的,这是一种解决方案,但这一条不适用于打包的JDK。考虑到问题的性质,/可能更合适,尽管它很长。由于您需要从根文件夹开始查找所有内容,因此没有理由添加更改该目录的附加步骤。这将返回当前安装的Java二进制文件。这是一件没有被要求的事情。