有没有可能在Java中动态编译一个类而不使用外部库?

ix0qys7i  于 2023-04-28  发布在  Java
关注(0)|答案(3)|浏览(130)

在我看来,Java编译器API允许在运行时编译一个类,编写其输出(。类文件)到文件系统。但是,不支持内存中编译。是这样吗?或者可以使用这个API在内存中编译一个类(从一个String),然后示例化这样的类?
(我知道我可以将类编译到文件系统,然后用自定义的类加载器加载它,但我想知道我是否可以在内存中编译它,而不经过文件系统)。
有没有其他的机制可以只使用J2SE在内存编译中完成这样的工作?BeanShell(I library that can do what I want)在其网页中提到,它可能会在“将来的某个时候”被包含在J2SE中,然而,其JSR的状态是“休眠”(不管它是什么意思)。

更新:

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

qjp7pelc

qjp7pelc1#

如果你有JDK,Java编译器是在工具中。jar,它只与JDK一起提供。参见http://docs.oracle.com/javase/7/docs/api/javax/tools/package-summary.html

mkh04yzy

mkh04yzy2#

Java编译器API。不支持. in-memory编译。是这样吗?
不。STBC使用JavaCompiler来执行此操作。
..然后示例化这样的类?
STBC并没有尝试加载/运行类,但我相信这应该是可能的。我想它可能需要一个自定义的“内存中”类加载器。
.. JavaCompiler API是否可以独立地执行此操作(是否安装了JDK)?
从页面上。.

系统需求

STBC将在任何版本为1的计算机上运行。6+ Java插件 * JDK(AKA SDK)。
* STBC使用的API仅仅是tools.jar中编译器的公共接口,tools.jar仅与JDK一起分发 *(尽管JDK的“公共JRE”似乎也获得了tools.jar)。..

4jb9z9bj

4jb9z9bj3#

JeKa(https://jeka.dev)提供了一组丰富的类,使其比使用JdkTool更简单。

相关问题