我们的项目正在使用AspectJ。它在Eclipse IDE中运行良好,因为它是Eclipse IDE中的AspectJ项目(类路径中有AspectJ Runtime)但是,如果我们使用ant在UNIX中构建项目,它就不起作用。我看到一些文章提到了ivy-target,我正在寻找更多关于如何配置我的AspectJ项目以使用Ant构建它的细节。
经过一番谷歌搜索,我发现我需要在META-INF下创建aop.xml,并将aspectjweaver.jar添加到ant build.properties中的jvm选项中。自从我看到方法被拦截后,这个方面似乎可以工作。但我在启动时发现了以下异常:
ERROR org.aspectj.weaver.bcel.BcelWorld - Unable to find class 'Object' in repository
java.lang.ClassNotFoundException: Object not found - unable to determine URL
at org.aspectj.apache.bcel.util.ClassLoaderRepository.loadClass(ClassLoaderRepository.java:292) ~[aspectjweaver.jar.0:1.7.3]
at org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass(BcelWorld.java:402) [aspectjweaver.jar.0:1.7.3]
at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:376) [aspectjweaver.jar.0:1.7.3]
...
我的@Aspect类如下:
@Aspect
public class CaseInsensitiveEqualsAspect {
@Pointcut("call(boolean equals(Object)) && args(compareString) && target(sourceString) && within(com.sample.package..*)")
public void equalsPointcut(final Object compareString, final String sourceString) {}
@Around("equalsPointcut(compareString, sourceString)")
public Object around(final ProceedingJoinPoint joinPoint, final Object compareString, final String sourceString)
throws Throwable {
System.out.println(">>>>>>>>>>>>>>>>Invoking equalsIgnoreCase...");
return sourceString.equalsIgnoreCase(compareString != null ? compareString.toString() : null);
}
}