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

Ola*_*ock 15 java jvm liferay

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

有些程序需要在JDK的JRE中运行,而不仅仅是“仅” JRE。我想知道是否有一种简单的方法来找出当前正在运行的程序所执行的内容。

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

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

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

在注释中从下至下阐明

我不时遇到Liferay的问题,该问题需要在JDK的JRE中运行。我很高兴想到只部署另一个插件,如果在没有JDK的情况下运行该插件,它将提供用户友好的错误消息。我回避分析仅在JRE环境中失败的代码,并且我不想修改Liferay的代码,而是添加自己的插件来进行分析和警告。

Mic*_*rry 20

javax.tools.ToolProvider.getSystemJavaCompiler() will return null if no compiler is available, and a JavaCompiler if it is.

Technically it just tells you if the compiler is available of course, but that in most scenarios will imply the existence of the JDK.

  • 当然,这不会告诉您是否存在命令行“ javac”命令,也不会告诉您是否有软件天真地假设要在“ jdk”安装程序内直接在“ jre”中运行(自Java 9开始就没有这种情况),将在当前环境下工作。 (3认同)