Как использовать зависимости, доступные только в памяти вместе с javax.tools JavaCompiler?
Мне нужно скомпилировать Java-файлы, которые имеют зависимости, которые существуют только как файлы классов, которые были загружены JVM, выполняющей компиляцию. Я использую javax.tool JavaCompiler, как описано здесь: Как программно скомпилировать и создать экземпляр класса Java?
Кроме того, я использую StandardJavaFileManager, чтобы указать компилятору мой локальный путь к классу и java-файлы, которые я компилирую.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
...
compiler.getTask(null, fileManager, null, null, null, compilationUnits2).call();
Требуемые зависимости были загружены пользовательским системным загрузчиком классов и по соображениям безопасности не могут быть записаны на диск для передачи в classpath компилятора.
Есть ли способ получить JavaCompiler, возвращаемый ToolProvider.getSystemJavaCompiler() из стандартного оракула JDK, чтобы использовать файлы классов, которые были загружены моим пользовательским загрузчиком классов, без записи их на диск? Я также открыт для расширения JavaCompiler или JavaFileManager по мере необходимости.
Единственный вариант, который я до сих пор придумал, - это использовать отражение для создания зависимостей в виде заготовок java-файлов на диске, компилировать их и предоставлять их JavaCompiler. Мне не важен этот вариант, так как он кажется громоздким и сложным, поскольку зависимости довольно сложны.
Я видел эти вопросы:
Скомпилируйте код полностью в памяти с помощью javax.tools.JavaCompiler
Как мне использовать JDK6 ToolProvider и JavaCompiler с загрузчиком классов контекста?
Однако эти решения обрабатывают динамическую компиляцию, но, похоже, не решают проблему зависимости памяти.