Исходя из нашего комментария, я думаю, что ответ ясен: нет, вы не можете сделать это с помощью компилятора JDK. Он запрашивает пакет при запросе пакета, но не конкретную зависимость от класса.
Примерно настолько близко, насколько вы можете понять, насколько я знаю:
Вот хорошая статья с кодом, хотя она должна быть адаптирована для обработки в классах памяти. В частности, проблема, которую вы описываете, решается методом JavaFileManager.list(...)
. Вы должны вернуть обратно JavaFileObjects здесь, которые вы кэшировали в памяти. Скорее всего, вам потребуется создать подкласс ForwardingJavaFileManager
, как описано в этой статье, хотя и модифицированный для обработки кэшированных классов, с которыми вы работаете.
Вы можете использовать это для компиляции чего-либо. Если он возвращает ошибки, используйте регулярное выражение, чтобы выяснить, чего не хватает. После генерации / компиляции кода для отсутствующей вещи повторите попытку компиляции исходного кода.
ПРИМЕЧАНИЕ. В какой-то момент он запрашивает FQN зависимого класса в качестве аргумента packageName в ForwardingFileManager.list (...). Я не пытался вернуть класс в тот момент. Это может не сработать, потому что пакет не будет соответствовать, но, возможно, будет.