使用Maven在同一个项目中的APT和AOP

使用Maven在同一个项目中的APT和AOP,第1张

使用Maven在同一个项目中的APT和AOP

我显然是唯一可以回答我自己的问题的人。

我已经使用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的功能来组合参数。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5561507.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存