2

假设我有一个String包含文件内容的.java文件。是否有任何 API 可以让我将此源文件编译为虚拟文件(即生成内容并将其存储在内存中,而不是在磁盘上.class创建实际的物理文件)?.class然后这个“虚拟”.class将在JVM中加载和执行?

编辑 1:我想这样做的唯一原因是因为有时,我的应用程序可能没有写权限。

4

2 回答 2

1

Java 确实有一个编译 API来动态编译文件,但我不知道不会将类文件保存到磁盘的选项。您始终可以使用 aClassLoader并动态加载这些类,然后再使用它们。您可以通过覆盖getFileForOutput方法将类加载到内存中。

或者,此文件管理器可能会将同级视为放置输出的提示。此提示的确切语义未指定。例如,JDK 编译器 javac 会将类文件放在与原始源文件相同的目录中,除非提供了类文件输出目录。为了促进这种行为,javac 可能在调用此方法时提供原始源文件作为同级文件。

另一种选择是使用像BeanShell这样的解释器,它将为您运行 java 代码。它像代码一样执行脚本,并且可以在 repl 模式下工作。

于 2013-04-18T05:27:35.343 回答
1

JavaCompiler为此使用。我认为诀窍是定义一个 custom JavaFileManager

于 2013-04-18T05:27:10.797 回答