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 代码编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

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

                相关文档推荐

                How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
                How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
                Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
                Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
                How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
                How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)
                  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>