>> Also, at present we compile our whole code-base with javac and then >> use the Ant task to run iajc again over the whole codebase. I wonder >> if we could just use iajc to compile those classes that actually have >> Aspects? Perhaps that might work around all/some of the compile errors >> we are getting? > > If you are rebuilding everything with iajc, that does seem a duplication of > effort. You either should just build with iajc or build with javac and then > binary weave the aspects into what you built with iajc. This latter approach > would probably avoid this bug. So javac your java modules. ajc your aspects > and supply an inpath to that ajc call that is your javac built code, the > output would be the woven form of that code. >
Thanks Andy, I am trying to take your suggestion to restrict what is compiled by AspectJ. We have one Aspect in our project called PermissionRequiredAspect which allows us to annotate certain methods within the codebase as needing a certain security context. Previously our Ant compilation looked like this - <javac includeAntRuntime="false" debug="${build.debug}" deprecation="${build.deprecation}" destdir="${build.classes}" encoding="UTF-8" optimize="${build.optimize}" srcdir="${src}" source="${build.compiler.source}" target="${build.compiler.target}" fork="true" memoryInitialSize="512m" memoryMaximumSize="1024m"> <include name="org/**"/> <classpath> <path refid="classpath.core"/> <path refid="classpath.jetty"/> <path refid="classpath.aspectj"/> </classpath> </javac> <iajc debug="${build.debug}" deprecation="${build.deprecation}" destdir="${build.classes}" encoding="UTF-8" srcdir="${src}" source="${build.compiler.source}" target="${build.compiler.target}" fork="true" maxmem="1024m" showWeaveInfo="true"> <include name="org/**"/> <classpath> <path refid="classpath.aspectj"/> <path refid="classpath.core"/> <path refid="classpath.jetty"/> </classpath> </iajc> Following your suggestion to reduce the amount of compilation done by iajc, I have now modified the iajc task to this: <iajc debug="${build.debug}" deprecation="${build.deprecation}" destdir="${build.classes}" encoding="UTF-8" srcdir="${src}" source="${build.compiler.source}" target="${build.compiler.target}" fork="true" maxmem="1024m" showWeaveInfo="true" inpath="${build.classes}"> <include name="org/exist/security/PermissionRequiredAspect.java"/> <classpath> <path refid="classpath.aspectj"/> <path refid="classpath.core"/> <path refid="classpath.jetty"/> </classpath> </iajc> The good news is that the compilation now works with both Java 7 and Java 8. The bad news however, is that at runtime when I try to use the method of a class that was woven, I get this error message for example: [junit] Caused by: java.lang.ClassFormatError: Duplicate field name&signature in class file org/exist/security/PermissionRequiredAspect [junit] at java.lang.ClassLoader.defineClass1(Native Method) [junit] at java.lang.ClassLoader.defineClass(ClassLoader.java:760) [junit] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [junit] at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) [junit] at java.net.URLClassLoader.access$100(URLClassLoader.java:73) [junit] at java.net.URLClassLoader$1.run(URLClassLoader.java:367) [junit] at java.net.URLClassLoader$1.run(URLClassLoader.java:361) [junit] at java.security.AccessController.doPrivileged(Native Method) [junit] at java.net.URLClassLoader.findClass(URLClassLoader.java:360) [junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) [junit] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) [junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) [junit] at org.exist.security.UnixStylePermission.setMode(UnixStylePermission.java:237) [junit] at org.exist.collections.Collection.setPermissions(Collection.java:1917) I guess there is something wrong with my compilation steps and that I need to remove something from compilation at some stage? Can you advise please? My aspect is here https://github.com/adamretter/exist/blob/aspectj-updates/src/org/exist/security/PermissionRequiredAspect.java and an example of where that aspect is used (via the PermissionRequired annotation is here) - https://github.com/adamretter/exist/blob/aspectj-updates/src/org/exist/security/UnixStylePermission.java#L234 Thanks Adam. -- Adam Retter skype: adam.retter tweet: adamretter http://www.adamretter.org.uk _______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/aspectj-users