0

Я здесь очень неловкий. Im разрабатывает плагин «Eclipse», который должен «компилировать» .java-файлы в файлы .class (или, может быть, даже банку).Скомпилировать классы Java во время выполнения плагина Eclipse

Я пытаюсь использовать Java Compiler API для того, чтобы сделать что-то вроде этого:

public class Compiler { 
    private JavaCompiler _javaCompiler; 
    private StandardJavaFileManager _sjfm = null; 
    private Files[] _filesIn; 

    public Compiler() 
    { 
     _javaCompiler = ToolProvider.getSystemJavaCompiler(); 
     _sjfm = _javaCompiler.getStandardFileManager(null, null, null); 
    } 

    public void CompileFiles(ArrayList<String> strings, String outputFolder) 
    { 
     //_javaCompiler.run 
     Iterable fileObject = _sjfm.getJavaFileObjectsFromStrings(strings); 
     String[] options = new String[]{"-d", outputFolder}; 
     _javaCompiler.getTask(null, null, null, Arrays.asList(options), null, fileObject).call(); 
     try { 
      _sjfm.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

Проблема заключается в том, когда я называю _sjfm = _javaCompiler.getStandardFileManager(null, null, null); я бегу в NullPointerException потому, что это «ожидаемый» поведение, когда не (см. это bug report)

Это StackOverflow post помогло мне каким-то образом, но каков был бы правильный способ скомпилировать файлы Java из плагина Eclipse, который должен быть доступен для публикации?

  1. Используйте альтернативный «компилятор» и просто включите банки и используйте их?
  2. Включите tools.jar (который находится в папке JDK) в моем плагине, динамически загрузите его и скомпилируйте из него?
  3. Любое другое решение, которое я не могу думать о

Что бы вы порекомендовали?

+0

Вы можете попробовать использовать Eclipse, JDT компилятор: http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Fguide%2Fjdt_api_compile.htm –

+0

да, Я пойду с этой идеей. Я знал, что у eclipse был свой собственный компилятор, но он никогда не думал использовать его. Отправьте ответ, и я приму его. – squelos

ответ

Смежные вопросы