问题描述
使用Maven 3.6.3。
对于一个有关AspectJ和JUnit的简单Java应用程序,我具有以下依赖关系:
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
哪里
<aspectj.version>1.9.6</aspectj.version>
<junit.version>5.6.2</junit.version>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<argLine>
-javaagent:${settings.localRepository}/org/.../aspectjweaver-${aspectj.version}.jar
</argLine>
<useSystemClassLoader>true</useSystemClassLoader>
</configuration>
</plugin>
<maven.surefire.plugin.version>2.22.2</maven.surefire.plugin.version>
直到此处,AOP仅适用于测试,因此:
以防万一:
<aspectj>
<aspects>
<aspect name="com.manuel.jordan.aop.CalculatorAspect"/>
<weaver options="-verbose -showweaveInfo">
<include within="*"/>
</weaver>
</aspects>
</aspectj>
重点在于:对于Main
执行,AOP不起作用,因为maven-surefire-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>
<arguments>
<argument>-javaagent:${settings.localRepository}/org/.../aspectjweaver-${aspectj.version}.jar</argument>
</arguments>
</configuration>
</plugin>
<exec.maven.plugin.version>3.0.0</exec.maven.plugin.version>
注意:javaagent:${settings.localRepository}/org/.../aspectjweaver-${aspectj.version}.jar
是两个插件的相同路径。请记住,对于第一个插件,它工作正常。所以路径是正确的。
Main
类可以运行并和平执行,但问题是未应用AOP。因此,由于“测试”中的AOP有效,exec-maven-plugin
中缺少的配置是什么?我读了许多 SO的帖子,并在共享的配置中闲逛,没事。
更新
如果我在终端中执行:
java -javaagent:pathtotheaspectjweaverjar.jar
-cp ./target/classes
com.manuel.jordan.Main
它工作正常,AOP正在按预期工作。
要做完一项研究后,必须先在-javaagent:pathtotheaspectjweaverjar.jar
参数之前加上-cp
参数。
当前问题场景:因此,通过Main
类及其(String[] args)
参数,我确认使用当前插件配置 {{1 }}参数的解释方式是一个简单的 Program参数
实际上如下:
-javaagent:pathtotheaspectjweaverjar.jar
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)