AspectJ没有看到META-INF / aop.xml

时间:2014-01-25 04:18:49

标签: tomcat7 aspectj load-time-weaving

我正在尝试使用我的Tomcat 7 webapp来加载时间编织,以便从外部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/

  3. 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]
    

    事实上,它试图在我指定的包之外编织一个类,并且考虑到服务器启动时间翻了四倍,我认为它正试图编织所有类。

    我错过了什么?

1 个答案:

答案 0 :(得分:2)

想出来。

WAR_ROOT/META-INF/是webapp元数据,由servletContext.getResource("/META-INF/bla")查找。

WAR_ROOT/WEB-INF/classes/META-INF是java类元数据,由getContextClassLoader().getResource("/META-INF/bla")查找。

我在Config项目中创建了META-INF/aop.xml(位于类路径上),现在一切正常。