AspectJ не видит META-INF/aop.xml

Я пытаюсь заставить Load Time Weaving работать с моим веб-приложением Tomcat 7, чтобы сплести класс из внешнего файла jar (расположенного в WEB-INF/lib).

Я сделал следующее:

  1. Запустил Tomcat со следующими параметрами: -javaagent:/path/aspectjweaver-1.7.0.jar -classpath /path/aspectjrt-1.7.0.jar:etc

  2. Поместил aop.xml в WAR_ROOT/META-INF/, WEB-INF/lib/META_INF, WEB-INF/lib and WEB-INF/

aop.xml:

<aspectj>
 <aspects>
   <aspect name="ca.gc.agr.agrishare.web.jsf.chartlet.AgriShareGanttRendererAspect"/>
 </aspects>
 <weaver options="-verbose -debug -XnoInline">
    <include within="org.jfree..*"/>
    <dump within="org.jfree..*" />
 </weaver>
</aspectj>

Независимо от того, куда я помещаю файл, мой целевой класс не вплетен, и я продолжаю видеть такие ошибки:

[WebappClassLoader@495b317b] error can't determine implemented interfaces of missing type javax.validation.ValidatorFactory
when weaving type org.hibernate.cfg.beanvalidation.TypeSafeActivator
when weaving classes 
when weaving 
 [Xlint:cantFindType]

Тот факт, что он пытается сплести класс вне указанного мной пакета, и учитывая, что время запуска сервера увеличилось в четыре раза, я думаю, что он пытается сплести все классы.

Что мне не хватает?


person Val Blant    schedule 25.01.2014    source источник


Ответы (1)


Догадаться.

WAR_ROOT/META-INF/ – это метаданные веб-приложения, которые просматривает servletContext.getResource("/META-INF/bla").

WAR_ROOT/WEB-INF/classes/META-INF — это метаданные классов Java, поиск которых выполнял getContextClassLoader().getResource("/META-INF/bla").

Я создал META-INF/aop.xml в своем проекте Config (который находится в пути к классам), и теперь все работает правильно.

person Val Blant    schedule 25.01.2014