从 Java 中针对 运行 JVM 编译 Java 个源文件

Compile Java source files against running JVM from within Java

从 java 中编译 Java 源代码是一项由 javafx.tools 包中的 Java 编译器工具辅助的任务。但是,有些东西我似乎找不到任何相关信息。

我问的问题是是否可以针对用于编译它的 JVM 编译 java 文件。我在使用多个 jar 库的软件上编写 运行s 的代码,其中一些库非常大,我打算动态编译单个 java 文件并加载生成的 class 文件几乎像脚本语言一样运行。为了使编译的 java 文件能够访问软件中的 classes 和变量,它需要在构建时将所有相同的库添加到其 class 路径,否则我将面临编译错误。

我已经搜索过关于这是否不可能的信息,但找不到,我得到完全不相关的结果。

如果不可能,我可以 link 所有需要的库(超过 30 个),我宁愿不这样做。如果无法针对当前环境进行编译,那么您认为动态获取 JVM 中加载的所有库列表的最简单方法是什么?

编辑:作为对 Jim 的回应,我了解到 java 个文件被编译成 class 个文件,而 class 个文件被加载。我知道库需要可供编译器等访问。我要说的是我有 30 多个库,总计超过 380 MB,并且我在一个文件夹中有几百个单独的 java 源文件扩展在主程序中定义的 class 以用作模块,如果我必须 link 所有数百个 380 MB 的文件进行编译,那将花费很多时间。我可以将它们全部编译在一起以解决大部分问题,但主要问题是 运行 的文件列表被添加到命令行的 -classpath 参数中,这可以改变任何时候,所以我不能硬编码。这就是问题第二部分存在的原因,我将如何获得用于 运行 当前程序的 class 路径,以便我可以将其传递给编译器。

当您使用编译器API 时,您指定要使用的类加载器。然后,此 ClassLoader 提供您编译代码可能需要的所有 类。我不记得细节了,但大约 5 年前我写了一个用于 Java 代码内存编译的库。 https://github.com/OpenHFT/Java-Runtime-Compiler