В настоящее время я создаю систему, которая позволит пользователю скомпилировать один или несколько проектов. Я занимался некоторыми исследованиями и решил использовать JavaCompilerAPI для этого. Я играю с ним, и мне удалось собрать отдельные java-файлы и составить список отдельных java-файлов.Использование JavaFileManager для компиляции проектов
Что я не могу сделать, это получить один проект java, не говоря уже о группе из них. Я где-то читал, что вы можете использовать JavaFileManager для этого, и я немного прочитал об этом, но я не могу найти никаких примеров этого, поэтому я застрял.
Это то, что я сделал до сих пор:
public List doCompilation(String sourceCode, String locationOfFile) {
List<String> compile = new ArrayList<>();
SimpleJavaFileObject fileObject = new DynamicJavaSourceCodeObject(locationOfFile, sourceCode);
JavaFileObject javaFileObjects[] = new JavaFileObject[]{fileObject};
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, Locale.getDefault(), null);
Iterable<? extends JavaFileObject> compilationUnits = Arrays.asList(javaFileObjects);
String[] compileOptions = new String[]{"-d", "C:/projects/Compiler/TempBINfolder/bin"};
Iterable<String> compilationOptions = Arrays.asList(compileOptions);
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
CompilationTask compilerTask = compiler.getTask(null, stdFileManager, diagnostics, compilationOptions, null, compilationUnits);
boolean status = compilerTask.call();
if (!status) {//If compilation error occurs
// Iterate through each compilation problem and print it
for (Diagnostic diagnostic : diagnostics.getDiagnostics()) {
compile.add(diagnostic.getKind().toString()+" on line "+ diagnostic.getLineNumber() +"\nIn file: \n"+ diagnostic.toString()+"\n\n");
}
}
try {
stdFileManager.close();//Close the file manager
} catch (IOException e) {
e.printStackTrace();
}
return compile;
}
Кто-нибудь знает, как это сделать?
Что вы подразумеваете под "java project"? Как это отличается от набора java-файлов (каждый из которых можно скомпилировать отдельно)? Какие проблемы вы испытываете при попытке скомпилировать «проект»? – Attila
хорошо, когда я говорю java-проект, я имею в виду набор java-файлов в определенном каталоге. i no i я могу скомпилировать их индивидуально, но способ, которым я располагаю в данный момент, - это все файлы в JList, и пользователь может выбрать файл, который они хотят скомпилировать, что я хочу сделать, это добавить папки проекта (все java-файлы с папкой) в JTree, а затем скомпилировать отдельные проекты с использованием корневого узла проекта, например, вы можете скомпилировать полный проект в eclipse, щелкнув по проекту на экране пакета и скомпилировав затем компиляцию всех java-файлов в папка – newSpringer
проблемы, с которыми я столкнулся, это то, что я получаю сообщение об ошибке «не могу найти символ» и указываю на класс, с которым вы используете метод, даже если файлы компилируются в eclipse и оператор import для класса, который вы используете используя метод from is is there there, он говорит, что я не могу найти класс – newSpringer