在飞,在存java代码汇编Java5和6Java
-
03-07-2019 - |
题
我怎么可以汇编java码从任意字符串(在存储器)在Java5和6,装载并运行一个具体方法上(predefined)?
在你面前的火焰这个我看了现有的实现:
- 大多数依靠Java6个编译器。
- 那些不依靠技巧。
- 是的,我检查了公共青年商会.无论是我太茂密了解它是如何工作的,或者它仅仅不.
- 我找不到如何饲料编译器,我的前类径(这是相当巨大的).
- 在执行工作(在Java6),我无法发现如何正确载的内类(或内部匿名类)。
- 我很喜欢它如果整个事情是在存储器,作为对的事情上运行多个环境。
我敢肯定这已经得到解决之前,但是我找不到任何东西,看起来甚至一半,生产质量上谷歌(除了青年商会,这正如我以前说过的,我没有管理的使用)。
编辑:
- 我看了JavaAssist-我需要内部类、Java5.0语言水平的支持和汇编与整个类路径。此外,我想到创建新类的飞行。我 可能是错误的,但是我不能找到如何这样做与JavaAssit.
- 我愿意使用一个文件系统基础的解决方案(调javac)但是我不知道如何神圣类路径,也不是如何后加载的文件(这是不是我的类路径)用一种特殊类装入器可以再循环的多个调用。虽然我不知道如何向研究它,我宁愿一个准备的解决方案。
Edit2:现在,我的内容与或平板电脑"评估".显然,这一切我需要它来(得到一串,评估它在上下文中的"当前"类路径。它不会错过一些的Java5功能,但它可以使用枚举(未定义)和编纂'普通'(删除)的课程,因此它应该够我想要什么。
我不想要答案,因为接受,但由于我希望有一个更好的解决方案来。
Edit3:接受或平板电脑的建议-它真正的作品奇妙。
解决方案
如果你不是完全依赖于汇编、解决方案等或平板电脑,时髦和其他的脚本语言是很容易地嵌入式(事实上,java已经建立支持插入一个脚本语言以你的代码甚至不知道什么语言的剧本写)
或平板电脑应该运行的任何100%java代码,请参考,并且我认为,常规可以运行最java-可能的。
其他提示
青年商会看起来很好。这段代码应该是你的基础:
JavaCompiler compiler = new JavaCompilerFactory().createCompiler("eclipse");
MemoryResourceReader mrr = new MemoryResourceReader();
mrr.add("resource name string", yourJavaSourceString.getBytes());
MemoryResourceStore mrs = new MemoryResourceStore();
CompilationResult result = compiler.compile(sources, mrr, mrs);
// don't need the result, unless you care for errors/warnings
// the class should have been compiled to your destination dir
任何原因不工作吗?
编辑: 加入一个
MemoryResourceStore
发送的编制类输出到存储器,就像要求。
此外,设置 javac
设置,喜欢的类路径在你的情况下,可以通过 setCustomArguments(String[] pCustomArguments)
在 JavacJavaCompilerSettings
类。
你可能想看看Janino。
从其网站:
Janino是一个编译器读取Java™表达块,类的身体、来源文件或一组源文件,并产生Java™码,装载和直接执行。Janino是不是要一个发展工具,但嵌入式编译器运行时间汇编的目的,例如表达的评价人员或者"服务器网页的"引擎,如JSP。
Im目前使用它在一个相当大的关键任务项目,它工作得很好
Javassist 你可能会感兴趣
运行的内部网的容器样Tomcat并第一次产生一个JSP页,然后援引它。
这也能让你摆脱旧的定义类通过仅仅复盖JSP页,而不是有你的类装入器的缓慢运行完整的。
是的"在存"的要求由于速度或由于不改变编码基地?
日食提供和使用其自己的编译器,是不javac
- 日食编译器被用于内部IDE(蚀)
- 日食编译器,也可作为一个纯粹的批量编译器 外面的日食
编制一个来源文件
$ java -jar ecj-3.5.2.jar HelloWorld.java