我有一个问题,我很困惑。
我知道 J ava R untime E nviroment和 J ava 之间存在差异D 发展 K 它。
我正在编写一个使用ToolProvider.getSystemJavaCompiler()
方法从代码中编译java代码的程序。
现在,我已经回答说如果我的客户没有安装JDK,我就无法从客户端编译代码。我的主要问题是,如何我能做到这一点?我不希望我的客户在计算机上安装JDK只是为了运行我的程序。
提前致谢!
答案 0 :(得分:0)
您需要在系统上编译它,并将相应java源文件的类文件分发给任何人。
该类文件不需要JDK,但必须在该系统上安装JRE才能运行类文件。
答案 1 :(得分:0)
如果你想编译代码,你需要一个编译器,所以如果不希望用户拥有你需要的编译器,你只需要捆绑它。
我真的不能说我知道如何捆绑标准的javac
编译器,尽管它可能可能,严格来说,找到Jar文件包含它并将其与您的代码捆绑在一起。不过,不知道这样的解决方案会有多强大。
但根据您的需要,您可能不需要标准javac
。有大量的字节码生成库,具有或多或少的高级功能。我不想推荐任何我没有个人经验的内容,但例子包括Byte Buddy或ASM。您也可以使用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编译器,我向您保证,这对于一个人而言并非易事。人