如何判断JDK是否在运行JVM中可用?

2022-09-04 01:04:03

注意:所有类似的问题都是从 shell 的角度来回答这个问题的(例如,是否可用? 或 )。我正在明确地寻找当前运行的JVM的视角javacjava -versionwhich java

有些程序需要从JDK的JRE中运行,而不仅仅是JRE。我想知道是否有一种简单的方法来找出我当前运行的程序的执行方式。

我正在寻找一种通用的方法来解决这个问题,而不是对所讨论的程序进行分析并重复其对JDK功能的使用。这就是为什么如果可能的话,我宁愿不执行外部进程测试的原因。我宁愿寻找一些可以在JDK中运行,但在JRE中失败的代码。javac

它可能与仅在JDK中可用的类一起使用。它可以是系统属性。或其他任何东西。Class.forName

如果我必须使用javac执行外部进程:那就这样吧。但我更喜欢更简单和通用的东西。

评论中来自深处的澄清

我不时会遇到Liferay的这个问题,它需要从JDK的JRE中运行。我正在考虑部署另一个插件,如果在没有可用的JDK的情况下运行,则提供用户友好的错误消息。我回避分析在仅限JRE的环境中哪些代码是失败的,我不想修改Liferay的代码,而是添加自己的插件来进行分析和警告。


答案 1

javax.tools.ToolProvider.getSystemJavaCompiler()如果没有可用的编译器,则返回,如果它是,则返回。nullJavaCompiler

从技术上讲,它只是告诉你编译器是否可用,但在大多数情况下,这意味着JDK的存在。


答案 2

Class.forName("com.sun.tools.javac.Main");

如果没有例外,则为 JDK。

它适用于当前的JDK,但它可能不是任何官方规范的一部分。


推荐