如何配置exec-maven-plugin使AspectJ切面在主程序运行时生效?
解决exec-maven-plugin启动时AspectJ AOP不生效的问题
我完全懂你的困扰——你已经通过终端手动执行验证了正确的命令格式,但用exec-maven-plugin时,-javaagent参数被错误地当成了程序参数(跟在主类后面),导致AspectJ的织入逻辑没触发。
问题根源
exec-maven-plugin的<arguments>标签是用来配置传递给main方法的程序参数,而不是JVM启动参数。你需要把-javaagent这类JVM级别的参数放到专门的<jvmArguments>标签里,它会被插件解析成java命令的前置参数,和你手动执行的顺序一致。
修正后的exec-maven-plugin配置
把原来的配置修改成这样:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>${exec.maven.plugin.version}</version> <configuration> <executable>java</executable> <mainClass>${main.class}</mainClass> <!-- 把JVM参数放到这里,而不是<arguments> --> <jvmArguments> -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar </jvmArguments> </configuration> </plugin>
补充说明
这样配置后,exec插件实际执行的命令就会和你在终端手动运行的格式完全一致:
java -javaagent:path/to/aspectjweaver.jar -cp ./target/classes com.manuel.jordan.Main
-javaagent参数会被放在最前面作为JVM启动参数加载,AspectJ的织入逻辑就能正常对主程序的类生效了。
如果你还有需要传递给main方法的程序参数,依然可以放在<arguments>标签里,插件会自动区分JVM参数和程序参数的顺序,不会产生冲突。
内容的提问来源于stack exchange,提问作者Manuel Jordan
相关产品推荐
相关产品推荐

