java - 在没有JDK

时间:2016-10-23 17:00:03

标签: java java-compiler-api javacompiler

我有一个问题,我很困惑。

我知道 J ava R untime E nviroment和 J ava 之间存在差异D 发展 K 它。

我正在编写一个使用ToolProvider.getSystemJavaCompiler()方法从代码中编译java代码的程序。

现在,我已经回答说如果我的客户没有安装JDK,我就无法从客户端编译代码。我的主要问题是,如何我能做到这一点?我不希望我的客户在计算机上安装JDK只是为了运行我的程序。

提前致谢!

4 个答案:

答案 0 :(得分:0)

您需要在系统上编译它,并将相应java源文件的类文件分发给任何人。

该类文件不需要JDK,但必须在该系统上安装JRE才能运行类文件。

答案 1 :(得分:0)

如果你想编译代码,你需要一个编译器,所以如果不希望用户拥有你需要的编译器,你只需要捆绑它。

我真的不能说我知道如何捆绑标准的javac编译器,尽管它可能可能,严格来说,找到Jar文件包含它并将其与您的代码捆绑在一起。不过,不知道这样的解决方案会有多强大。

但根据您的需要,您可能不需要标准javac。有大量的字节码生成库,具有或多或少的高级功能。我不想推荐任何我没有个人经验的内容,但例子包括Byte BuddyASM。您也可以使用ABCL

答案 2 :(得分:0)

Eclipse's compiler也值得一看。

还有一个问题here

答案 3 :(得分:0)

所以除非你将编译器本身与你的应用程序捆绑在一起,否则你真的无法做你想要做的事情,或者除非你找到一个已经包含了所有Java编译器代码的库,所以它没有&# 39;必须使用JDK编译器,你不会得到你想要的,你想要的是能够将包含源代码的String转换为Java类。

我不明白你想要完成什么,但我能给你的最佳选择是asm。如果您正在完成该任务,则可以在运行时手动编写新类,而无需使用JDK编译器。但是,这并不涉及您使用完整的源代码串并将其转换为Class对象。这是你在Java级字节码的低级别工作。

本教程可以帮助您入门: https://www.javaworld.com/article/2071777/design-patterns/add-dynamic-java-code-to-your-application.html

这是类文件的Java文档。您可以使用它来扩展您从第一个链接学到的内容: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html

这是我可以动态创建类的唯一实例。话虽这么说,您可以尝试编写自己的Java编译器,可以将源代码转换为类而无需获得Java编译器,但此时您自己就是在重新创建Java编译器,我向您保证,这对于一个人而言并非易事。人