我們使用aspectJ在現有的應用程序上獲得一些度量。在Eclipse中使用AJDT進行構建和編織時,一切都很好。但是在整合env。我們使用ant腳本來構建和部署應用程序。NoSuchMethodError在運行時使用iajc編譯的aspectOf()
的問題上發生了的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;
}
}
}
Basicaly,我想攔截我的方面包內的每一個電話,除了在的ExceptionHandler本身。
Ant構建這個樣子的:
<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任務構建的應用程序和環節
從結果,
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沒有編織!
我希望有人能幫助我在這一個;-)
這個錯誤有一個更常見的原因[here](http://stackoverflow.com/questions/12929716/why-server-complaining-about-aspectof-is-missing) –