1. <tfoot id='BrT8E'></tfoot>
      <legend id='BrT8E'><style id='BrT8E'><dir id='BrT8E'><q id='BrT8E'></q></dir></style></legend>

      <small id='BrT8E'></small><noframes id='BrT8E'>

      • <bdo id='BrT8E'></bdo><ul id='BrT8E'></ul>
      <i id='BrT8E'><tr id='BrT8E'><dt id='BrT8E'><q id='BrT8E'><span id='BrT8E'><b id='BrT8E'><form id='BrT8E'><ins id='BrT8E'></ins><ul id='BrT8E'></ul><sub id='BrT8E'></sub></form><legend id='BrT8E'></legend><bdo id='BrT8E'><pre id='BrT8E'><center id='BrT8E'></center></pre></bdo></b><th id='BrT8E'></th></span></q></dt></tr></i><div id='BrT8E'><tfoot id='BrT8E'></tfoot><dl id='BrT8E'><fieldset id='BrT8E'></fieldset></dl></div>

    2. Java 5 和 Java 6 的动态内存中 Java 代码编译

      On-the-fly, in-memory java code compilation for Java 5 and Java 6(Java 5 和 Java 6 的动态内存中 Java 代码编译)
      <legend id='tEj4G'><style id='tEj4G'><dir id='tEj4G'><q id='tEj4G'></q></dir></style></legend>
      <i id='tEj4G'><tr id='tEj4G'><dt id='tEj4G'><q id='tEj4G'><span id='tEj4G'><b id='tEj4G'><form id='tEj4G'><ins id='tEj4G'></ins><ul id='tEj4G'></ul><sub id='tEj4G'></sub></form><legend id='tEj4G'></legend><bdo id='tEj4G'><pre id='tEj4G'><center id='tEj4G'></center></pre></bdo></b><th id='tEj4G'></th></span></q></dt></tr></i><div id='tEj4G'><tfoot id='tEj4G'></tfoot><dl id='tEj4G'><fieldset id='tEj4G'></fieldset></dl></div>
      • <bdo id='tEj4G'></bdo><ul id='tEj4G'></ul>

          <tfoot id='tEj4G'></tfoot>
            <tbody id='tEj4G'></tbody>
        1. <small id='tEj4G'></small><noframes id='tEj4G'>

                本文介绍了Java 5 和 Java 6 的动态内存中 Java 代码编译的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                如何从 Java 5 和 Java 6 中的任意字符串(内存中)编译 Java 代码,加载它并在其上运行特定方法(预定义)?

                How can I compile java code from an arbitrary string (in memory) in Java 5 and Java 6, load it and run a specific method on it (predefined)?

                在你发火之前,我查看了现有的实现:

                Before you flame this, I looked over existing implementations:

                • 大部分依赖于 Java 6 Compiler API.
                • 那些不这样做的人,依靠技巧.
                • 是的,我查看了 commons-jci.要么我太密集而无法理解它是如何工作的,要么就是没有.
                • 我找不到如何为编译器提供我当前的类路径(非常大).
                • 在有效的实现上(在 Java 6 中),我找不到如何正确加载内部类(或内部匿名类).
                • 如果整个东西都在内存中,我会非常喜欢它,因为它可以在多个环境中运行.

                我确信这个问题之前已经解决了,但是我在谷歌上找不到任何看起来甚至是半生产质量的东西(除了 jci,正如我之前所说,我还没有设法使用).

                I'm sure this has been solved before, but I can't find anything that looks even half-production quality on google (except jci, which, as I've said before, I haven't managed to use).

                • 我查看了 JavaAssist - 我需要内部类、Java 5.0 语言级别支持以及使用整个类路径进行编译.另外,我想即时创建新课程.一世可能是错误的,但我找不到如何使用 JavaAssit 执行此操作.
                • 我愿意使用基于文件系统的解决方案(调用 javac),但我不知道如何判断类路径,也不知道以后如何使用特殊的类加载器加载文件(不在我的类路径中)可以为多次调用而回收.虽然我知道如何研究它,但我更喜欢现成的解决方案.

                目前,我对 BeanShell 的评估"感到满意.显然它做了我需要它做的一切(获取一个字符串,在当前"类路径的上下文中评估它.它确实错过了一些 Java 5 功能,但它可以使用枚举(未定义)和编译的通用"(删除) 类,所以对于我想要的应该足够了.

                For now, I'm content with BeanShell "evaluate". Apparently it does everything I need it to (get a string, evaluate it in the context of the 'current' classpath. It does miss some of Java 5 features, but it can use enums (not define) and compiled 'generic' (erased) classes, so it should be enough for what I want.

                我不想将答案标记为已接受,因为我确实希望出现更好的解决方案.

                Edit3:接受了 beanshell 的建议 - 它真的很有效.

                Accepted the beanshell suggestion - it really works wonderfully.

                推荐答案

                如果你不完全依赖于编译,像 Beanshell、groovy 和其他脚本语言这样的解决方案很容易嵌入(事实上,java 已经内置支持插入脚本语言,因此您的代码甚至不知道脚本是用什么语言编写的)

                If you're not completely tied to compiling, solutions like Beanshell, groovy and the other scripting languages are easily embedded (in-fact, java has built-in support for plugging in a scripting language so your code doesn't even know what language the script is written in)

                Beanshell 应该运行任何 100% java 代码 IIRC,我相信 Groovy 可以运行大多数 java 代码——可能全部.

                Beanshell should run any 100% java code IIRC, and I believe Groovy can run most java code--possibly all.

                这篇关于Java 5 和 Java 6 的动态内存中 Java 代码编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                相关文档推荐

                Compiling C++ for the JVM(为 JVM 编译 C++)
                Compile to java bytecode (without using Java)(编译成java字节码(不使用Java))
                How to drive C#, C++ or Java compiler to compute 1+2+3+...+1000 at compile time?(如何在编译时驱动 C#、C++ 或 Java 编译器计算 1+2+3+...+1000?)
                Java ClassLoader: load same class twice(Java ClassLoader:两次加载相同的类)
                How to debug .class files in ECLIPSE?(如何在 ECLIPSE 中调试 .class 文件?)
                Java quot;The blank final field may not have been initializedquot; Anonymous Interface vs Lambda Expression(Java“可能尚未初始化空白的最终字段匿名接口与 Lambda 表达式)
                  1. <i id='GcUoS'><tr id='GcUoS'><dt id='GcUoS'><q id='GcUoS'><span id='GcUoS'><b id='GcUoS'><form id='GcUoS'><ins id='GcUoS'></ins><ul id='GcUoS'></ul><sub id='GcUoS'></sub></form><legend id='GcUoS'></legend><bdo id='GcUoS'><pre id='GcUoS'><center id='GcUoS'></center></pre></bdo></b><th id='GcUoS'></th></span></q></dt></tr></i><div id='GcUoS'><tfoot id='GcUoS'></tfoot><dl id='GcUoS'><fieldset id='GcUoS'></fieldset></dl></div>
                      <tbody id='GcUoS'></tbody>

                    <small id='GcUoS'></small><noframes id='GcUoS'>

                    <tfoot id='GcUoS'></tfoot>

                    <legend id='GcUoS'><style id='GcUoS'><dir id='GcUoS'><q id='GcUoS'></q></dir></style></legend>

                      • <bdo id='GcUoS'></bdo><ul id='GcUoS'></ul>