Я здесь очень неловкий. 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, который должен быть доступен для публикации?
- Используйте альтернативный «компилятор» и просто включите банки и используйте их?
- Включите tools.jar (который находится в папке JDK) в моем плагине, динамически загрузите его и скомпилируйте из него?
- Любое другое решение, которое я не могу думать о
Что бы вы порекомендовали?
Вы можете попробовать использовать Eclipse, JDT компилятор: http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Fguide%2Fjdt_api_compile.htm –
да, Я пойду с этой идеей. Я знал, что у eclipse был свой собственный компилятор, но он никогда не думал использовать его. Отправьте ответ, и я приму его. – squelos