我显然是唯一可以回答我自己的问题的人。
我已经使用Maven Antrun插件通过ant来编译AspectJ 。这是我的pom片段:
<plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.4</version> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>${aspectj.version}</version> </dependency> </dependencies> <executions> <execution> <id>ajc-compile</id> <phase>process-classes</phase> <configuration> <tasks> <property name="aspectj.sourcepath" value="${project.basedir}/src/main/aspect" /> <property name="aspectj.binarypath" value="${project.build.outputDirectory}" /> <property name="aspectj.targetpath" value="${project.build.directory}/aspectj-classes" /> <property name="scope_classpath" refid="maven.compile.classpath" /> <property name="plugin_classpath" refid="maven.plugin.classpath" /> <ant antfile="ajc-ant.xml" /> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> <execution> <id>ajc-test-compile</id> <phase>process-test-classes</phase> <configuration> <tasks unless="maven.test.skip"> <property name="aspectj.sourcepath" value="${project.basedir}/src/test/aspect;${project.basedir}/src/main/aspect" /> <property name="aspectj.binarypath" value="${project.build.testOutputDirectory}" /> <property name="aspectj.targetpath" value="${project.build.directory}/aspectj-test-classes" /> <property name="scope_classpath" refid="maven.test.classpath" /> <property name="plugin_classpath" refid="maven.plugin.classpath" /> <ant antfile="ajc-ant.xml" /> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions></plugin>我首先编译Java类(并让APT负责),将编译后的类用作Aspectj的二进制输入,将Aspectj编译到新文件夹中,然后将生成的编织类移动到原始compile目录中,覆盖非aspectj类。这是我的ant XML文件(很好的部分是,我可以将其用于编译和测试编译):
<project basedir="." default="ajc"> <path id="classpath"> <pathelement path="${scope_classpath}" /> <pathelement path="${plugin_classpath}" /> </path> <taskdef classname="org.aspectj.tools.ant.taskdefs.AjcTask" name="iajc" classpathref="classpath" /> <target name="ajc"> <iajc sourceroots="${aspectj.sourcepath}" inpath="${aspectj.binarypath}" destdir="${aspectj.targetpath}" classpathref="classpath" source="1.6" target="1.6" /> <move todir="${aspectj.binarypath}"> <fileset dir="${aspectj.targetpath}"> <include name="**/*.class" /> </fileset> </move> </target></project>在下一步中,我现在创建了一个Maven插件,该插件在内部完成所有这些ant调用。虽然我不能在这里共享代码,但我将展示它如何简化POM配置:
<plugin> <groupId>com.myclient.maven.plugins</groupId> <artifactId>maven-ajc-plugin</artifactId> <version>1.0-SNAPSHOT</version> <executions> <execution> <id>compile-ajc</id> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>testcompile-ajc</id> <goals> <goal>test-compile</goal> </goals> <configuration> <aspectSourcePath>${project.basedir}/src/main/aspect</aspectSourcePath> </configuration> </execution> </executions> <configuration> </configuration></plugin>使用ANT / GMaven集成,可以轻松组合Maven,Groovy和Ant的功能来组合参数。



