I think in theory what you are doing there is fine, but some kind of bug is 
affecting things.

You could exclude the aspect from the first compile (by javac) - that may make 
it behave. You could ‘exclude’ it in the first step or maybe give it a “.aj” 
suffix meaning javac wouldn’t notice it and then add it in your secondary step.

cheers,
Andy

> On Jan 30, 2015, at 6:03 AM, Adam Retter <adam.ret...@googlemail.com> wrote:
> 
>>> 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

_______________________________________________
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

Reply via email to