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用法页面。