2

在我看来,Java Compiler API 允许在运行时编译一个类,将其输出(.class 文件)写入文件系统。但是,不支持内存编译。这个对吗 ?或者可以使用这个 API 在内存中编译一个类(从一个字符串)并在之后实例化这样的类?

(我知道我可以将类编译到文件系统,然后使用自定义类加载器加载它,但我想知道是否可以在内存中编译它,而无需通过文件系统)。

仅使用 J2SE 在内存编译中是否有另一种替代机制? BeanShell(我可以做我想做的事情的库)在其网页中提到它可能会在“将来的某个时间点”包含在 J2SE 中,但是,它的JSR的状态是“休眠”(无论它是什么意思) .

更新:

理想情况下,我想知道这是否可以仅使用 J2SE 完成(或者是否有任何预期的 J2SE 增强功能将允许我在例如 Java 8 中执行此操作)。然而,关于如何做到这一点需要安装 JDK 的提示也很受欢迎(感谢 Evgeniy)。

4

2 回答 2

4

如果你有 JDK,java 编译器是可能的,它只在 JDK 附带的 tools.jar 中。请参阅http://docs.oracle.com/javase/7/docs/api/javax/tools/package-summary.html

于 2013-09-22T16:35:59.730 回答
1

Java Compiler API .. 不支持内存编译。这个对吗?

不,STBC正是使用JavaCompiler来做到这一点的。

..然后实例化这样的类?

STBC 并没有尝试加载/运行该类,但我相信它应该是可能的。我想它可能需要一个自定义的“内存中”类加载器。

..如果安装了JDK,JavaCompiler API 可以独立完成吗?

从页面..

系统要求

STBC 将在任何具有 1.6+ Java 版本的计算机上运行插入* JDK(又名 SDK)。

*STBC 使用的 API 只是编译器的公共接口,仅与 JDK 一起tools.jar分发(尽管 JDK 的“公共 JRE”似乎也获得了. ..tools.jar

于 2013-09-22T17:01:00.517 回答