java动态编译整个项目,解决jar包找不到
问题 原文:
itzyx/index.php/javac/
动态将java文件编译为class文件解决
方案: 将temp\sdl\src目录中的java源文件编译成class文件,并存放到temp\sdl\classes目录中
java中早就提供了用java方式去动态编译java源文件的接口,有关java动态编译的API都在 javax.tools包中。使用jdk1.6以上版本提供的JavaCompiler工具来动态编译java源文件。 我们可以通过ToolProvider类的静态方法getSystemJavaCompiler得到JavaCompiler对象实例。 得到
JavaCompiler对象实例后,我们可以调用该工具的getTask(Writer out, JavaFileManager fileManager, DiagnosticListener super JavaFileObject> diagnosticListener, Iterable
options, Iterable classes, Iterable extends JavaFileObject> compilationUnits) 方法获取一个编译任务对象。
该方法的第一个参数为文件输出,这里我们可以不指定,我们采用
javac命令的-d参数来指定class文件 的生成目录。 第二个参数为文件管理器实例
该文件管理器实例的作用就是将我们需要动态编译的java源文件转换为getTask需要的编译单元。
第三个参数
DiagnosticCollector diagnostics是在编译出错时,存放编译错误信息。 第四个参数为编译命令选项,就是javac命令的可选项,这里我们主要使用了-d和-sourcepath这两个 选项。
第五个参数为类名称
第六个参数为上面提到的编译单元,就是我们需要编译的java源文件 当我们得到CompilationTask compilationTask编译任务后, 我们就可以调用compilationTask.call() 方法进行编译工作