Как использовать зависимости, доступные только в памяти, с 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();

Требуемые зависимости были загружены настраиваемым загрузчиком системных классов и по соображениям безопасности не могут быть записаны на диск для передачи в путь к классам компилятора.

Есть ли способ получить JavaCompiler, возвращаемый ToolProvider.getSystemJavaCompiler() из стандартного оракула JDK, чтобы использовать файлы классов, которые были загружены моим пользовательским загрузчиком классов, без записи их на диск? Я также открыт для расширения JavaCompiler или JavaFileManager по мере необходимости.

Единственный вариант, который я придумал до сих пор, - это использовать отражение для создания зависимостей в виде заглушенных java-файлов на диске, компилировать их и предоставлять их компилятору Java. Мне не нравится этот вариант, так как он кажется громоздким и сложным, поскольку зависимости довольно сложные.

Я видел эти вопросы:

Полностью компилировать код в памяти с помощью javax.tools.JavaCompiler

Как использовать JDK6 ToolProvider и JavaCompiler с контекстным загрузчиком классов?

Однако эти решения обрабатывают динамическую компиляцию, но, похоже, не решают проблему зависимости только от памяти.


person Skcussm    schedule 14.06.2016    source источник
comment
Вы могли бы использовать нестандартный файловый менеджер...?   -  person user253751    schedule 15.06.2016
comment
Конечно, если это решение. Слишком часто я обнаруживал, что библиотеки в jdk чрезмерно зависят от перехода к объекту File. Будет ли это работать для javacompiler?   -  person Skcussm    schedule 15.06.2016
comment
Возможный дубликат полностью скомпилировать код в памяти с помощью javax.tools.JavaCompiler   -  person Paul Sweatte    schedule 20.01.2017