是否存在系统调用之类的东西,它可以告诉您是否在“裸”JRE 而不是 JDK 打包之上运行?(缺少 ClassNotFound 异常)。
确实是基本问题,但在 Google/SO 中没有出现任何问题。
3 回答
您可以使用以下技巧来确定 JDK 的存在:
javax.tools.ToolProvider.getSystemJavaCompiler()
如果返回值为null
?
然后没有可用的编译器,并且您在“裸”JRE 之上运行。
否则,返回值为JavaCompiler
.
这几乎适用于所有场景,除非出于某种原因您手动包含此 JDK jar 而不是作为完整 JDK 的一部分(在这种情况下,它不会返回 null)。
显然JRE
(Java Run-time Environment)是Java的运行时环境。
JRE
Java 运行时环境 (JRE) 包含 JVM、库和其他支持文件。它不包含任何开发工具,如编译器、调试器等。实际上,JVM 运行程序,它使用JRE 中提供的类库和其他支持文件。如果要运行任何 java 程序,则需要在系统中安装 JRE。
JDK
Java Developer Kit (JDK) 包含开发 Java 程序所需的工具,以及运行这些程序的 JRE。工具包括编译器(javac.exe)、Java应用程序启动器(java.exe、jawaw.exe)、Appletviewer等。
仅当您想编写程序并编译它们时才需要 JDK。对于运行 java 程序,JRE 就足够了。
一切都在 JRE 上运行,JDK 是指允许 java 开发的工具集,如 javac 编译器或 visualvm 应用程序,以查看有关运行 vms 的信息。没有像在JDK上运行这样的东西
如果您需要即时编译内容,您可以启动另一个调用 javac 的进程。或者您使用 java 的 eclipse 编译器,它是一个编译 java 代码字节码的 jar 文件。