资源描述:
《java动态编译整个项目,解决jar包找不到问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、java动态编译整个项目,解决jar包找不到问题原文:http://itzyx.com/index.php/javac/动态将java文件编译为class文件解决方案:将tempsdlsrc目录中的java源文件编译成class文件,并存放到tempsdlclasses目录中java中早就提供了用java方式去动态编译java源文件的接口,有关java动态编译的API都在javax.tools包中。使用jdk1.6以上版本提供的JavaCompiler工具来动态编译java源文件。我们可以通过ToolProvider类的静态方法getSystemJavaCompi
2、ler得到JavaCompiler对象实例。1.//获取编译器实例 2.JavaCompilercompiler=ToolProvider.getSystemJavaCompiler(); 得到JavaCompiler对象实例后,我们可以调用该工具的getTask(Writerout,JavaFileManagerfileManager,DiagnosticListenerdiagnosticListener,Iterableoptions,Iterableclasses,Iterable
3、compilationUnits)方法获取一个编译任务对象。 3.CompilationTaskcompilationTask=compiler.getTask(null,fileManager,diagnostics,options,null,compilationUnits); 该方法的第一个参数为文件输出,这里我们可以不指定,我们采用javac命令的-d参数来指定class文件的生成目录。第二个参数为文件管理器实例 4.//获取标准文件管理器实例 5.StandardJavaFileManagerfileMan
4、ager=compiler.getStandardFileManager(null,null,null); 该文件管理器实例的作用就是将我们需要动态编译的java源文件转换为getTask需要的编译单元。 6.//获取要编译的编译单元 7.IterablecompilationUnits=fileManager.getJavaFileObjectsFromFiles(sourceFileList); 第三个参数DiagnosticCollectordiagnostics是在编译出错时,存
5、放编译错误信息。第四个参数为编译命令选项,就是javac命令的可选项,这里我们主要使用了-d和-sourcepath这两个选项。 8./** 9.*编译选项,在编译java文件时,编译程序会自动的去寻找java文件引用的其他的java源文件或者class。-sourcepath选项就是定义java源文件的查找目录,-classpath选项就是定义class文件的查找目录,-d就是编译文件的输出目录。 10.*/ 11.Iterableoptions=Arrays.asList("-encoding",encoding,"-classpath",j
6、ars,"-d",targetDir,"-sourcepath",sourceDir); 12. 第五个参数为类名称第六个参数为上面提到的编译单元,就是我们需要编译的java源文件当我们得到CompilationTaskcompilationTask编译任务后,我们就可以调用compilationTask.call()方法进行编译工作 13.//运行编译任务 14.compilationTask.call() 1.package com.util; 2. 1.import java.io.File; 2.import java.io.FileFilter;
7、3.import java.io.IOException; 4.import java.util.ArrayList; 5.import java.util.Arrays; 6.import java.util.List; 7. 8.import javax.tools.Diagnostic; 9.import javax.tools.DiagnosticCollector; 10.import javax.tools.JavaCompiler; 11.import javax.tools.JavaFileOb