This makes enough sense to me, it doesn't look like a workaround anymore.
-RobertFrom: [email protected]
Date: Mon, 26 Sep 2011 17:47:20 -0400
To: [email protected]
Subject: Re: [mojo-user] Weaving Two Jars
Robert,
Thanks for the info. I'll switch it to use the jar dependency that I was doing
in the Configuration project. So now both modules weave jars together:
Monitoring.jar weaved with Service.jar in Weave-Service projectMonitoring.jar
weaved with Configuration.jar in Weave-Configuration project
Both forcing ajc compile.
Does this make sense? Again, just want to make sure I'm not doing some kind of
"work-around" but I understand the project layout as defined in Maven.
On Sep 26, 2011, at 5:01 PM, Robert Scholte wrote:{quote}
Weave-Service (dep on Service proj. and Monitoring proj.)
- in the pom for this I have a <weaveDirectory> that points to the
Service proj. source and a <aspectLibrary> that points to the
Monitoring.jar via <groupId, artifactId>
{quote}
If I understand you correctly, from one project you're pointing to a
sourcefolder of another project? If so, don't do that!
The only way you should share classes between projects is through dependencies.
You should treat every project as a stand-alone unit.
Even when using a multi-module project, such modules are in fact all
stand-alone projects.
So don't use weaveDirectory to refer to a folder outside the project.
-Robert
----------------------------------------
> Date: Wed, 21 Sep 2011 13:30:35 -0400
> From: [email protected]
> To: [email protected]
> Subject: [mojo-user] Weaving Two Jars
>
> This may take some initial explaining to justify what I did. I want to
> make sure in my newbishness that I haven't gone and hacked a pom I
> didn't need to.
>
> <initial_explaination>
>
> Service-Project (has java classes)
> Configuration-Project (has java classes)
> Monitoring-Project (has .java and .aj files)
>
> Each project above has a pom in it.
> Monitoring has the atypical aspectj pom setup, it compiles the aspects
> and jar's them up. The Monitoring-Project has defined dependencies on
> each of the other projects (<dependency>) as the aspects use classes
> from both Service and Configuration. Monitoring builds/compiles/jar's
> fine.
>
> I then want to WEAVE the Monitoring-Project into both Service and
> Configuration projects, but adding the Monitoring dependency to either
> project causes a circular dependency. So I created two more projects
> that simply takes the Monitoring jar and weaves it into each project.
>
> </initial_explaination>
>
> I have these projects
>
> Service-Project (has java classes)
> Configuration-Project (has java classes)
> Monitoring-Project (has .java and .aj files)
>
> Weave-Service (dep on Service proj. and Monitoring proj.)
> - in the pom for this I have a <weaveDirectory> that points to the
> Service proj. source and a <aspectLibrary> that points to the
> Monitoring.jar via <groupId, artifactId>
> - THIS WORKS to create a Service-Project whose sources have been
> weaved with Monitoring.jar
>
> Weave-Configuration (dep. on Configuration and Monitoring)
> - same deal except points to Configuration etc
> - FAILS with stack trace at end of this email.
>
> Weave-Configuration works however if I do this in the pom.xml:
>
> <configuration>
> <forceAjcCompile>true</forceAjcCompile>
> <source>1.5</source>
> <target>1.5</target>
> <aspectLibraries>
> <aspectLibrary>
> <groupId>com.monitoring</groupId>
> <artifactId>Monitoring</artifactId>
> </aspectLibrary>
> </aspectLibraries>
> <weaveDependencies>
> <weaveDependency>
> <groupId>com.config</groupId>
> <artifactId>Configuration</artifactId>
> </weaveDependency>
> </weaveDependencies>
> </configuration>
>
> What I am doing is weaving two JAR's together. Because there is no
> "source" involved with this I have to <forceAjcCompile> because
> without source (according to the source code of the maven aspectj
> plugin) the compiling/weaving won't be done.
>
> Should weaving two jars via a pom be something Maven and the AspectJ
> Maven plugin allow or has the stack trace below that I can't figure
> out caused me to create an unnecessary hack here?
>
> Stack Trace:
> java.lang.NullPointerException
> at
> org.aspectj.ajdt.internal.core.builder.EclipseSourceContext.getSourceFile(EclipseSourceContext.java:49)
> at
> org.aspectj.ajdt.internal.core.builder.EclipseSourceContext.makeSourceLocation(EclipseSourceContext.java:57)
> at org.aspectj.weaver.bcel.BcelShadow.getSourceLocation(BcelShadow.java:3359)
> at org.aspectj.weaver.bcel.BcelWorld.reportWeavingMessage(BcelWorld.java:197)
> at org.aspectj.weaver.bcel.BcelWorld.reportMatch(BcelWorld.java:141)
> at org.aspectj.weaver.Shadow.implementMungers(Shadow.java:631)
> at org.aspectj.weaver.Shadow.implement(Shadow.java:544)
> at
> org.aspectj.weaver.bcel.BcelClassWeaver.implement(BcelClassWeaver.java:3147)
> at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:490)
> at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:100)
> at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1687)
> at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1631)
> at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1394)
> at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1180)
> at
> org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:514)
> at
> org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:447)
> at
> org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:432)
> at
> org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:98)
> at
> org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:652)
> at
> org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392)
> at
> org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1021)
> at
> org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:268)
> at
> org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:181)
> at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
> at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
> at org.aspectj.tools.ajc.Main.run(Main.java:371)
> at org.aspectj.tools.ajc.Main.runMain(Main.java:248)
> at
> org.codehaus.mojo.aspectj.AbstractAjcCompiler.execute(AbstractAjcCompiler.java:405)
> at
> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107)
> at
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
> at
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
> at
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
> at
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
> at
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
> at
> org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
> at
> org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
> at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
> at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
> at org.apache.maven.cli.MavenCli.execute(MavenCli.java:534)
> at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
> at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> at java.lang.reflect.Method.invoke(Method.java:600)
> at
> org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
> at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
> at
> org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
> at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
> http://xircles.codehaus.org/manage_email
>
>