NoSuchMethodError AspectOf()在运行时通过使用iajc构建

问题描述 投票:8回答:4

我们使用aspectJ来获取现有应用程序的一些指标。在Eclipse中使用AJDT进行构建和编织时,一切都很好。但是在整合环境中。我们使用蚂蚁脚本来构建和部署应用程序。

问题发生在ExceptionHandler上,我确实确保我们的方面不会引发异常并破坏应用程序

@Aspect
public class ExceptionHandlerAspect {

    /**
     * Pointcut
     */
    @Pointcut("within(com.xxx.yyy.aop.aspect.*..*)")
    public void allMethodInAspectPackage() {}

    /**
     *  Pointcut
     */
    @Pointcut("!within(com.xxx.yyy.aop.aspect.ExceptionHandlerAspect)")
    public void notInExceptionHandlerAspectClass() {}
    /**
     *  Pointcut
     */
    @Pointcut("call(* *(..))")
    public void allClassAndMethod() {}

    /**
    @Around("allClassAndMethod() && allMethodInAspectPackage() && notInExceptionHandlerAspectClass()")
    public Object logException(ProceedingJoinPoint joinPoint) throws Throwable{
        Object ret = null;
        try {
            ret = joinPoint.proceed();
        }catch (Throwable exception) {
            if (joinPoint.getSignature().getDeclaringTypeName().equalsIgnoreCase("org.aspectj.lang.ProceedingJoinPoint")) {
                throw exception;
            }
            this.logException.info("Exception in " + joinPoint.getSignature().getDeclaringTypeName(),exception);
        }finally {
            return ret; 
        }

    }

}

基本来说,我想拦截我的Aspects包中的每个调用,但ExceptionHandler本身除外。

蚂蚁的身材看起来像这样:

<iajc inpath="${classes.dir}" destDir="${classes.dir}" fork="true" maxmem="${aspectj.maxmem}" verbose="true" showWeaveInfo="true" debug="true">
    <classpath refid="ajclasspath"/>
</iajc>

$ {classes.dir}是javac任务在其中构建应用程序和各个方面的classes目录

根据结果,>]

Exception in thread "main" java.lang.NoSuchMethodError: com.xxx.yyy.aop.aspect.ExceptionHandlerAspect.aspectOf()Lcom/xxx/yyy/aop/aspect/ExceptionHandlerAspect;
    at com.xxx.yyy.aop.aspect.ecs.AspectBaseEcs.inspectLoginInfo(AspectBaseEcs.java:65)
    at com.xxx.yyy.app.es.security.Security.loadApplications(Security.java:172)
    at com.xxx.yyy.app.es.gui.VSDlgLogin.loadSecurity(VSDlgLogin.java:346)
    at com.xx.yyy.app.es.ApplicationSuite.start(ApplicationSuite.java:839)
    at com.xxx.yyy.app.es.ApplicationSuite.main(ApplicationSuite.java:501)

看起来ExceptionHandler没有被编织!

我希望有人可以帮助我解决这个问题;-)

我们使用aspectJ来获取现有应用程序的一些指标。在Eclipse中使用AJDT进行构建和编织时,一切都很好。但是在整合环境中。我们使用蚂蚁脚本来构建和...

aspectj
4个回答
5
投票

最后找到了问题。我们的应用程序也依赖于包含方面的公共模块jar。


1
投票

我有非常相似的问题


0
投票

看来您已忘记声明长宽比路径。您要做的只是编译而不是编织。结果是java.lang.NoSuchMethodError


0
投票

当我使用Spring Boot时遇到了这个例外,但是我对AspectJ的配置是以“旧方式”完成的。

© www.soinside.com 2019 - 2024. All rights reserved.