Вы можете использовать API ToolProvider
для программного запуска компиляции.(см. этот учебник для справки)
Исходя из этого, вам нужно всего лишь создать правильную абстракцию, чтобы определить, что такое проект (исходные папки, путь к классам и т. д.), и выиметь тонкий интерфейс для компиляции нескольких проектов.
Я бы, вероятно, использовал ThreadPool для реализации фактической компиляции:
ExecutorService threadPool =
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
Или, если вы не можете использовать потоки, используйте пул компиляторов(или держатели компилятора) с библиотекой типа commons / pool .
В любом случае, вы можете иметь этот рабочий процесс:
- Запрос приходит
- преобразовать запрос в определение проекта
- либо запросить бесплатный компилятор, либо поместить проект в очередь
- compile
- вернуть дескриптор задания компиляции, чтобы клиент могопросить статус асинхронно