0

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

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

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

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

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

4

1 回答 1

0

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

于 2016-08-06T17:08:29.290 回答