大家好 我正在编写一些软件,允许用户在我的软件包中创建自己的 Java 类以供特定用途。显然,我的软件需要能够调用 Java 编译器来编译用户生成的类以在我的程序中使用。但是,我不想要求用户下载并安装整个 JDK,以便他们可以访问 javac Java 编译器。我知道 Jave 6 中有一个新的 Java 编译器 API,但即便如此,仅拥有 JRE 而没有 JDK 的用户在尝试实例化 Java 编译器工具时将得到一个 null 对象。
那么,让我的程序能够编译 Java 类,同时要求最终用户在其计算机上安装 JRE 的最佳方法是什么?如果这是不可能的,我需要在用户计算机上安装的最小库/jar 文件集是什么?
我想另一种可能性可能是使用 JWS (javaws) 通过网络启动应用程序。在这种情况下,我的软件是否可以不需要JDK(我认为主要是tools.jar)?我是否必须以某种方式将tools.jar 与我的软件捆绑在一起?
您可以使用 Eclipse 中的独立 Java 编译器。它不需要安装 JDK,并且它是您可以在项目中使用的单个 JAR 文件。这是 Eclipse 本身内部使用的编译器,但它也可以集成到其他程序中。您可以在 http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/index.php 找到当前最新的稳定版本,查找 Look for JDT Core Batch Compiler。文档位于 http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm
您还可以使用 Janino,它还可以编译比完整 Java 类更小的单元:块、表达式。但它不是完整的编译器,它不支持用户使用的 Java 语言的所有功能(泛型、注释、枚举……)
要使用 java 编译器,您需要将
tools.jar
包含到您的应用程序中(例如,想要加载编译器的类加载器必须可以访问它 - 最容易由系统类加载器访问)。
也许http://asm.ow2.org/这会有用?动态生成字节码?
听起来更好的解决方案是使用某种可以在 JVM 中运行而无需编译的脚本语言。
可能 Java Scripting API 对您有用。 我确信还有其他选择。