二、Janino简介
Janino是一种内嵌的开源Java编译器。Janino并不是一种提供给开发人员编译程序的编译器,而是Java程序在运行时编译Java代码的编译器。
对使用过JSP的Java开发人员来说,Java源代码(通常内嵌于JSP中)动态编译成类文件是很熟悉的技术。但却未必知晓此技术的复杂性。而造成它比较笨拙的原因在于需要安装JDK(非JRE)。由于JDK并非免费,于是又出现了license的问题。此外,对于不同的平台,需进行不同的平台配置并部署相应的类文件。对简化版的程序也同样需要复杂的操作。
尽管存在以上的问题,一些开源内库如Jasper仍基于JDK,且能提供很好的程序执行功能。基于Java的构建工具Ant同样面临在编译Java代码时需克服过于复杂的问题。基于以上所述,动态编译Java代码通常被认为是没有办法的办法,且在实际应用中表现欠佳。
Janino采用如下的方式来解决这些问题:
1. Janino如同普通的应用程序一样,运行在JVM上,而不是将编译的工作间接转交给javac(或是等同的Java编译器)来完成。同时也不需要额外的配置或安装JDK。
2. 由于Janino直接从JVM获得classes类文件,而不是通过应用程序获取class文件和.jar文件。这意味着无需考虑权限问题或是构建路径的配置。
3 Janino提供一种简单易用的方式来编译表达、脚本和classes类文件。开发人员无需关心加载动态生成代码的技术细节,因为Janino自动实现了它。在最简单的层面,传递一个包含Java代码的字符串即可返回一个对象。
Janino被更广范的应用于那些比较复杂、杂乱且与平台相关的Java应用程序的源码编译。Janino通过动态编译代码,从而提高了程序的性能。