AspectJ加载时织入用于签名罐

时间:2010-11-08 10:16:11

标签: java tomcat aop aspectj load-time-weaving

使用带有签名的jar的AspectJ加载时编织是否有人成功?

我遇到了异常并且不知道如何修复它(使用AspectJ 1.6.8-16.10测试):

Exception in thread "main" java.lang.NoClassDefFoundError: com/package/clazz$AjcClosure1
    at com.package.test.main(test.java:55)
Caused by: java.lang.ClassNotFoundException: com.package.clazz$AjcClosure1
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 1 more

坦率地说,事件我不确定它是否在技术上可行,但我知道类似的问题(使用来自签名的java类的动态生成的java代码)是为Hibernate项目完成的(即使用Javassist而不是CGLIB)。详细信息为here

1 个答案:

答案 0 :(得分:3)

https://bugs.eclipse.org/bugs/show_bug.cgi?id=328099中描述了类似问题,并在AspectJ 1.6.12中修复了该问题。 AspectJ有时会在编织期间生成闭包类,并且必须使用与生成它们的jar相同的保护域来定义它们。在1.6.12.M1中,现在应该可以正常工作。