Использование JavaCompiler с ссылками на файлы Classpath внутри уха

Я работаю над проектом, в котором корпоративный архив (ухо), развернутый на сервере JBoss, должен динамически компилировать (и запускать) класс. Для этого я использую класс JavaCompiler - сложность возникает из-за того, что компилируемый класс имеет ссылки на некоторые классы, содержащиеся в EJB jar внутри уха.

Это не проблема, когда развернутое ухо «взрывается» при развертывании, поэтому это просто каталог, а не архив — в этом случае я могу указать требуемый jar в параметре -classpath компилятора, и компиляция работает отлично. К сожалению, из-за ограничений систем, с которыми я работаю, развертывание этих ушей «взорванными» неприемлемо, и компилятор, похоже, не может «увидеть» требуемый jar, когда он завернут в архив.

Учитывая, что динамическая компиляция происходит из соответствующего уха, и поэтому загрузчик классов системы имеет доступ к содержимому требуемой банки, могу ли я каким-либо образом сказать компилятору, чтобы он просто использовал классы, загруженные системным классом погрузчик?

Я понимаю, что это многословный вопрос, но любая помощь будет оценена по достоинству.

Спасибо


person Russell    schedule 10.05.2013    source источник


Ответы (1)


Кажется, что нет простого способа получить JavaCompiler зависимости загрузки скомпилированного кода от ClassLoader. Однако можно реализовать JavaFileManager напрямую и перенаправить операции для StandardLocation.CLASS_PATH, используя поиск ресурсов в контексте ClassLoader (getResource(<class/resource name>)). Это сняло бы ограничение StandardJavaFileManager, непосредственно работающего с Files.

Кажется, кто-то уже реализовал этот подход в качестве прототипа: http://atamur.blogspot.de/2009/10/using-built-in-javacompiler-with-custom.html

person haui    schedule 11.07.2017