7

有人成功使用带有签名罐子的 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

坦率地说,我不确定这在技术上是否可行,但我知道 Hibernate 项目(即使用 Javassist 而不是 CGLIB)完成了类似的问题(使用从签名的 java 类动态生成的 java 代码)。详情在这里

4

1 回答 1

3

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

于 2012-04-13T11:45:35.637 回答