2012-11-20 74 views
0

的結果我有以下的(簡化的)代碼,我的類,它調用Java編譯器來處理一個給定的源文件中:獲取編譯Java源文件,另一個Java類中,使用JavaCompiler進行包

package test; 
import javax.tools.*; 

public class SimpleCompileTest { 
    public static void main(String[] args) { 
     String fileToCompile = "MyClass.java"; 

     JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
     int compilationResult = compiler.run(null, null, null, fileToCompile); 

     if(compilationResult == 0){ 
      System.out.println("Compilation is successful"); 
     } else { 
      System.out.println("Compilation Failed"); 
     } 
    } 
} 

編譯成功,但現在我怎麼能得到MyClass.java的結果,如何運行此編譯的代碼。

+0

http://stackoverflow.com/questions/10480046/how-can-i-create-a-java-class-file-from-a-java-file-from-my-program –

回答

0
package javacompiler; 
import javax.tools.JavaCompiler; 
import javax.tools.ToolProvider; 
public class COmpilerHello { 
    public static void main(String[] args) 
    { 
     String s="C:/Users/MariaHussain/Desktop/hussi.java"; 
     JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
     int result = compiler.run(System.in,System.out,System.err,s); 
     System.out.println("Compile result code = " + result); 
    } 
} 

看到結果variale像0,1 2的各種值顯示comilation狀態,無論是編譯或不

+0

確定其罰款,但我怎樣才能得到hussi.java的輸出.........? – user1429953

0

得到JavaFileManager,設置保存位置.class文件,然後通過加載(自定義)的類裝載器:

StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, Locale.getDefault(), null); 

stdFileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(new File("classDir"))); 

+ custom classloader 

或者不保存: JavaCompiler from JDK 1.6: how to write class bytes directly to byte[] array?

你在哪裏指出: https://weblogs.java.net/blog/2008/12/17/how-compile-fly

其中主要想法是使用自定義MemoryFileManager作爲JavaFileManager。

相關問題