Използване на JavaCompiler с Classpath, рефериращо буркани в ухото

Работя върху проект, в който корпоративен архив (ухо), разположен на JBoss сървър, трябва да компилира (и изпълнява) клас динамично. Използвам класа JavaCompiler, за да направя това - усложнението идва от факта, че класът, който се компилира, има препратки към някои от класовете, съдържащи се в ejb jar в ухото.

Това не е проблем, когато разгърнатото ухо е „взривено“ при разгръщане, така че е просто директория, а не архив - в този случай мога да укажа необходимия jar в опцията -classpath на компилатора и компилацията работи глоба. За съжаление поради ограниченията на системите, с които работя, не е приемливо решение тези уши да бъдат разгърнати „взривени“ и компилаторът изглежда не може да „види“ необходимия буркан, когато е опакован в архив.

Като се има предвид, че динамичната компилация се извършва от въпросното ухо и следователно системата за зареждане на класове има достъп до съдържанието на необходимия буркан, има ли някакъв начин да кажа на компилатора просто да използва класовете, както са заредени от системния клас товарач?

Оценявам, че това е нещо като многословен въпрос, но всяка помощ ще бъде оценена.

Благодаря


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