如何判断 JDK 在 运行 JVM 中是否可用?
How to tell if JDK is available from within running JVM?
注意:所有类似的问题都是从shell的角度回答这个问题(例如javac
可用吗?java -version
或which java
)。我正在明确地寻找当前 运行ning JVM 的 观点。
有些程序需要 运行 来自 JDK 的 JRE,而不是 "just" JRE。我想知道是否有一种简单的方法可以找出我的 当前 运行ning 程序 正在执行什么。
我正在寻找一种通用的方法来解决这个问题,而不是分析有问题的程序并复制其对 JDK 功能的使用。这就是为什么如果可能的话,如果 javac
在路径上,我宁愿不执行外部进程测试。我宁愿寻找一些代码,这些代码将 运行 在 JDK 中,但在 JRE 中 失败 。
它可能是 Class.forName
和 class,只有 JDK 才有。它可能是一个系统 属性。或者其他。
如果我必须 使用 javac 执行外部进程:那就这样吧。但我更喜欢更简单和通用的东西。
来自评论深处的澄清:
有时我会 运行 解决 Liferay 的这个问题,这需要 运行 来自 JDK 的 JRE。我正在考虑部署另一个插件,如果 运行 没有 JDK 可用,它会提供用户友好的错误消息。我回避分析哪些代码在纯 JRE 环境中失败,我不想修改 Liferay 的代码,而是添加我自己的插件来进行分析和警告。
Class.forName("com.sun.tools.javac.Main");
如果没有异常就是一个JDK.
它适用于当前的 JDKs,但它可能不属于任何官方规范。
如果没有可用的编译器,javax.tools.ToolProvider.getSystemJavaCompiler()
将 return null
,如果可用,则 JavaCompiler
。
从技术上讲,它只是告诉您 编译器 是否可用,但在大多数情况下这意味着 JDK.
存在
注意:所有类似的问题都是从shell的角度回答这个问题(例如javac
可用吗?java -version
或which java
)。我正在明确地寻找当前 运行ning JVM 的 观点。
有些程序需要 运行 来自 JDK 的 JRE,而不是 "just" JRE。我想知道是否有一种简单的方法可以找出我的 当前 运行ning 程序 正在执行什么。
我正在寻找一种通用的方法来解决这个问题,而不是分析有问题的程序并复制其对 JDK 功能的使用。这就是为什么如果可能的话,如果 javac
在路径上,我宁愿不执行外部进程测试。我宁愿寻找一些代码,这些代码将 运行 在 JDK 中,但在 JRE 中 失败 。
它可能是 Class.forName
和 class,只有 JDK 才有。它可能是一个系统 属性。或者其他。
如果我必须 使用 javac 执行外部进程:那就这样吧。但我更喜欢更简单和通用的东西。
来自评论深处的澄清:
有时我会 运行 解决 Liferay 的这个问题,这需要 运行 来自 JDK 的 JRE。我正在考虑部署另一个插件,如果 运行 没有 JDK 可用,它会提供用户友好的错误消息。我回避分析哪些代码在纯 JRE 环境中失败,我不想修改 Liferay 的代码,而是添加我自己的插件来进行分析和警告。
Class.forName("com.sun.tools.javac.Main");
如果没有异常就是一个JDK.
它适用于当前的 JDKs,但它可能不属于任何官方规范。
javax.tools.ToolProvider.getSystemJavaCompiler()
将 return null
,如果可用,则 JavaCompiler
。
从技术上讲,它只是告诉您 编译器 是否可用,但在大多数情况下这意味着 JDK.
存在