Использование JavaCompiler с Classpath, ссылающимся на jar внутри уха
Я работаю над проектом, в котором корпоративный архив (ear), развернутый на сервере JBoss, должен динамически скомпилировать (и запустить) класс. Для этого я использую класс JavaCompiler - сложность заключается в том, что скомпилированный класс имеет ссылки на некоторые классы, содержащиеся в ejb jar внутри уха.
Это не проблема, когда развернутое ухо "взорвано" при развертывании, так что это просто каталог, а не архив - в этом случае я могу указать требуемый jar в опции -classpath компилятора, и компиляция работает хорошо. К сожалению, из-за ограничений систем, с которыми я работаю, это неприемлемое решение для развертывания этих ушей "в разобранном виде", и компилятор, похоже, не может "увидеть" требуемый jar, когда он помещен в архив.
Учитывая, что динамическая компиляция происходит из-за уха, и, следовательно, системный загрузчик классов имеет доступ к содержимому необходимого jar-файла, есть ли какой-нибудь способ, которым я могу сказать компилятору просто использовать классы, загруженные системным классом погрузчик?
Я ценю, что это несколько словесный вопрос, но любая помощь будет оценена.
Спасибо
1 ответ
Кажется, что не существует простого способа JavaCompiler
загрузить зависимости скомпилированного кода из ClassLoader
, Тем не менее, можно реализовать JavaFileManager
непосредственно и перенаправить операции для StandardLocation.CLASS_PATH
использование поиска ресурсов в контексте ClassLoader
(getResource(<class/resource name>)
). Это сняло бы ограничение StandardJavaFileManager
непосредственно работает на File
s.
Кто-то, похоже, уже реализовал этот подход на прототипе: http://atamur.blogspot.de/2009/10/using-built-in-javacompiler-with-custom.html