AspectJ время загрузки для подписанных банок
У кого-нибудь есть успех в использовании 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). Подробности здесь.
1 ответ
Проблема симуляции описана в https://bugs.eclipse.org/bugs/show_bug.cgi?id=328099 и исправлена в AspectJ 1.6.12. AspectJ иногда генерирует классы замыкания во время плетения, и они должны быть определены с тем же доменом защиты, что и созданный ими jar. В 1.6.12.M1 теперь это должно работать правильно.