根据Java中运行的JVM编译Java源文件



从Java中编译Java源代码是一项由javafx.Tools包中的Java编译器工具帮助的任务。然而,有些事情我似乎找不到任何信息。

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

我四处寻找这是否不可能的信息,但找不到,我得到了完全无关的结果。

如果我不可能链接所有需要的库(超过30个),我宁愿不链接。如果不可能在当前环境下编译,那么你认为动态获取JVM中加载的所有库的列表最简单的方法是什么?

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

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