Tag: 运行时编译

在Java应用程序运行时定义类

在Java中,是否可以在应用程序运行时动态创建类定义,然后创建该类的对象? 例如,正在运行的应用程序将读入一个文本文件,该文件包含要包含在新类中的类成员列表。 然后,应用程序将根据成员列表定义类定义,然后对其进行实例化。

加载外部源代码并在内部使用它们(通过重新编译或其他东西)

有没有办法使用外部存储的源代码并将其加载到Java程序中,以便它可以被它使用? 我希望有一个程序可以在不编辑完整源代码的情况下进行更改,甚至可以在不编译每次的情况下进行更改。 另一个优点是,我可以像我想要的那样更改部分代码。 当然,我必须有接口,以便可以将数据发送到此并再次将其恢复到固定源程序。 当然,它应该比纯粹的口译系统更快。 那么有没有一种方法可以像这样外部源代码部分的额外编译和程序的启动完成后呢? 提前谢谢你,Andreas 🙂

适用于Java 5和Java 6的即时内存Java代码编译

如何从Java 5和Java 6中的任意字符串(在内存中)编译java代码,加载它并在其上运行特定方法(预定义)? 在你点燃之前,我查看了现有的实现: 大多数人依赖Java 6 Compiler API。 那些没有,依靠技巧。 是的,我检查了commons-jci。 要么我太密集了,不能理解它是如何工作的,要么就是它没有。 我找不到如何向编译器提供当前的类路径(这是非常巨大的)。 在有效的实现上(在Java 6中),我找不到如何正确加载内部类(或内部匿名类)。 如果整个东西都在内存中,我会非常喜欢它,因为它在多个环境中运行。 我确信之前已经解决了这个问题,但我找不到任何看起来甚至是谷歌半生产质量的东西(除了jci,正如我之前所说,我还没有设法使用)。 编辑: 我查看了JavaAssist – 我需要内部类,Java 5.0语言级支持以及使用整个类路径进行编译。 另外,我想动态创建新类。 我可能弄错了,但我找不到如何用JavaAssit做到这一点。 我愿意使用基于文件系统的解决方案(调用javac),但我不知道如何划分类路径,也不知道如何使用特殊的类加载器加载文件(不在我的类路径中)回收多次调用。 虽然我知道如何研究它,但我更喜欢现成的解决方案。 Edit2:现在,我满足于BeanShell“评估”。 显然,它完成了我需要它的一切(获取一个字符串,在’当前’类路径的上下文中评估它。它确实错过了一些Java 5特性,但它可以使用枚举(不定义)和编译’generics’(擦除) )类,所以它应该足够我想要的东西。 我不想将答案标记为已被接受,因为我希望能找到更好的解决方案。 Edit3:接受了beanshell建议 – 它确实非常有用。