2012-11-20 4 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.