知识大全 在SE6中调用编译器的两种方法[4]

Posted 文件

篇首语:要须心地收汗马,孔孟行世目杲杲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在SE6中调用编译器的两种方法[4]相关的知识,希望对你有一定的参考价值。

Java进阶:在SE6中调用编译器的两种方法[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  通过JavaCompiler进行编译都是在当前目录下生成 class文件 而使用编译选项可以改变这个默认目录 编译选项是一个元素为String类型的Iterable集合 如我们可以使用如下代码在D盘根目录下生成 class文件

  Iterable options = Arrays asList( d d:\\\\ );  JavaCompiler CompilationTask task = piler getTask(null fileManager   diagnostics options null pilationUnits);

  在上面的例子中options处的参数为null 而要传递编译器的参数 就需要将options传入

  有时我们编译一个Java源程序文件 而这个源程序文件需要另几个Java文件 而这些Java文件又在另外一个目录 那么这就需要为编译器指定这些文件所在的目录

  Iterable options = Arrays asList( sourcepath d:\\\\src );

  上面的代码指定的被编译Java文件所依赖的源文件所在的目录

  三 从内存中编译

  JavaCompiler不仅可以编译硬盘上的Java文件 而且还可以编译内存中的Java代码 然后使用reflection来运行它们 我们可以编写一个JavaSourceFromString类 通过这个类可以输入Java源代码 一但建立这个对象 你可以向其中输入任意的Java代码 然后编译和运行 而且无需向硬盘上写 class文件

  import java lang reflect *;  import java io *;  import javax tools *;  import javax tools JavaCompiler CompilationTask;  import java util *;  import java net *;  public class test_pilerapi    private static void pilerJava() throws Exception    JavaCompiler piler = ToolProvider getSystemJavaCompiler();  DiagnosticCollector diagnostics = new DiagnosticCollector();  // 定义一个StringWriter类 用于写Java程序  StringWriter writer = new StringWriter();  PrintWriter out = new PrintWriter(writer);  // 开始写Java程序  out println( public class HelloWorld );  out println( public static void main(String args[]) );  out println( System out println(\\ Hello World\\ ); );  out println( );  out println( );  out close();  //为这段代码取个名子 HelloWorld 以便以后使用reflection调用  JavaFileObject file = new JavaSourceFromString( HelloWorld writer toString());  Iterable pilationUnits = Arrays asList(file);  JavaCompiler CompilationTask task = piler getTask(null null   diagnostics null null pilationUnits);  boolean success = task call();  System out println( Success: + success);  // 如果成功 通过reflection执行这段Java程序  if (success)    System out println( 输出 );  Class forName( HelloWorld ) getDeclaredMethod( main new Class[]   String[] class ) invoke(null new Object[]   null );   System out println( 输出 );       public static void main(String args[]) throws Exception      pilerJava();       // 用于传递源程序的JavaSourceFromString类  class JavaSourceFromString extends SimpleJavaFileObject    final String code;  JavaSourceFromString(String name String code)      super(URI create( string:/// + name replace( / )+ Kind SOURCE extension) Kind SOURCE);   this code = code;     @Override  public CharSequence getCharContent(boolean ignoreEncodingErrors)      return code;     

cha138/Article/program/Java/hx/201311/27244

相关参考

知识大全 在SE6中调用编译器的两种方法[2]

Java进阶:在SE6中调用编译器的两种方法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 在SE6中调用编译器的两种方法[1]

Java进阶:在SE6中调用编译器的两种方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 SE6调用编译器的两种方法[1]

Java进阶:SE6调用编译器的两种方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在

知识大全 SE6调用编译器的两种方法[2]

Java进阶:SE6调用编译器的两种方法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  三

知识大全 Java SE6调用Java编译器的两种新方法

JavaSE6调用Java编译器的两种新方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 Java调用Eclipse的编译器JDT

Java调用Eclipse的编译器JDT  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  想给项目

知识大全 方法调用的绑定

  将一个方法调用同一个方法主体连接到一起就称为绑定(Binding)若在程序运行以前执行绑定(由编译器和链接程序如果有的话)就叫作早期绑定大家以前或许从未听说过这个术语因为它在任何程序化语言里都是不

知识大全 .NET的动态编译与WS服务调用详解

.NET的动态编译与WS服务调用详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了N

知识大全 ASP.NET预编译Web应用程序规避调用延迟

ASP.NET预编译Web应用程序规避调用延迟  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  A

知识大全 jQuery中after的两种用法实例

jQuery中after的两种用法实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  法一在每个