APT和AOP在同一个项目中,使用Maven
我必须在同一个Maven项目中使用Annotation Processing(apt)和AspectJ。
两者都适合自己,但我需要根据apt创建的代码创建方面。 所以我需要二进制编织(原始源文件由apt扩展)。 如何在maven项目中启用二进制编织?
我知道唯一的标准选项是使用weaveDependencies参数提供依赖项 ,但这很糟糕。 还有别的办法吗?
好吧,我可以使用Maven Antrun插件嵌入AspectJ ant任务 ,但我不想诉诸于此 。
我显然是唯一能够回答我自己问题的人。
我已经使用Maven Antrun Plugin通过ant编译AspectJ。 这是我的pom片段:
maven-antrun-plugin 1.4 org.aspectj aspectjtools ${aspectj.version} ajc-compile process-classes run ajc-test-compile process-test-classes run
我首先编译java类(让APT做它的东西),使用编译的类作为aspectj的二进制输入,将aspectj编译到一个新文件夹中,并将生成的编织类移动到原始的编译目录,覆盖非aspectj类。 这是我的ant XML文件(很好的部分是我可以将它用于编译和测试编译):
在下一步中,我现在已经创建了一个Maven插件,可以在内部执行所有这些ant调用。 虽然我不能在这里分享代码,但我将展示它如何简化POM配置:
com.myclient.maven.plugins maven-ajc-plugin 1.0-SNAPSHOT compile-ajc compile testcompile-ajc test-compile ${project.basedir}/src/main/aspect
使用ANT / GMaven集成 ,可以很容易地组合Maven,Groovy和Ant的function。
受Sean Patrick Floyd上面提出的解决方案的启发,我创建了一个Maven插件 ,可以完成所有开箱即用的操作:
com.jcabi jcabi-maven-plugin 0.7.18 ajc
Mojo目标文档位于com.jcabi:jcabi-maven-plugin:ajc
用法页面。