大家好 我正在编写一些软件,允许用户为我的软件包中的特定用途创建自己的Java类。显然,我的软件需要能够调用Java编译器来编译用户生成的类,以便在我的程序中使用。但是,我不想要求用户下载和安装整个JDK,以便他们可以访问javac Java编译器。我知道在Jave 6中有一个新的Java编译器API,但即使这样,只有JRE而不是JDK的用户在尝试实例化Java编译器工具时会得到一个空对象。
那么,什么是使程序能够编译Java类同时要求最终用户在其计算机上安装JRE的最佳方法是什么?如果这不可能,那么我需要在用户机器上安装的最小库/ jar文件集是什么?
我想另一种可能性是使用JWS(javaws)通过网络启动应用程序。在这种情况下,我的软件是否可以不需要JDK(我认为主要是tools.jar)?我会以某种方式将tools.jar与我的软件捆绑在一起吗?
答案 0 :(得分:6)
您可以使用独立Java compiler from Eclipse。它不需要安装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语言的所有功能(泛型,注释,枚举......)
答案 1 :(得分:3)
要使用java编译器,您需要在应用程序中包含tools.jar
(例如,必须由想要加载编译器的类加载器访问它 - 最容易通过System类加载器访问)。
答案 2 :(得分:1)
也许http://asm.ow2.org/这会有用吗?要在飞行中生成字节码吗?
答案 3 :(得分:0)
听起来更好的解决方案是使用一些可以在JVM中运行而无需编译的脚本语言。
Java Scripting API可能会对你有用。我相信还有其他选择。