我们使用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进行构建和编织时,一切都很好。但是在整合环境中。我们使用蚂蚁脚本来构建和...
最后找到了问题。我们的应用程序也依赖于包含方面的公共模块jar。
我有非常相似的问题
看来您已忘记声明长宽比路径。您要做的只是编译而不是编织。结果是java.lang.NoSuchMethodError
当我使用Spring Boot时遇到了这个例外,但是我对AspectJ的配置是以“旧方式”完成的。