如何使用 AspectJ maven 插件 运行 我的 java 测试

How to run my java tests with AspectJ maven plugin

我想通过 AOP 记录我的测试。我有 class AspectLogger,我在其中定义了切入点和建议。当我 运行 aspectj:test 编译时,在输出中我看到建议已添加到测试中。喜欢

[INFO] Join point 'method-execution(void Back_end_task.APITest.test())' in Type 'Back_end_task.APITest' (APITest.java:22) advised by before advice from 'AspectLogger' (AspectLogger.java:26)

但是当我在输出中 运行 mvn clean test 时,我看到这样的错误:

java.lang.NoSuchMethodError: AspectLogger.aspectOf()LAspectLogger;
    at Back_end_task.APITest.test(APITest.java:23)

通过搜索这个问题,我发现我应该将我的项目作为依赖项添加到 aspectj-maven-plugin 的 <aspectLibraries> bloc,并将我的项目的依赖项添加到 <dependencies> bloc pom.xml。但问题在于:

[FATAL] 'dependencies.dependency MyTraining:project:1.0-SNAPSHOT' for MyTraining:project:1.0-SNAPSHOT is referencing itself

这是 link 我的 project

请多多指教。我错过了什么?我做错了什么?我想学习如何使用方面。

您构建中的问题是您使用编译时织入,然后 运行 使用加载时织入代理进行测试。后者不是必需的。 This commit 修复您的构建:

--- pom.xml (revision 8aa7b98f5c6c15676580783c2f351c253212fbee)
+++ pom.xml (revision 72f37c4377b7189578f6afd5c45473efd8c63bc4)
@@ -89,12 +89,6 @@
             <version>${aspectj.version}</version>
         </dependency>

-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjweaver</artifactId>
-            <version>${aspectj.version}</version>
-        </dependency>
-
         <!--<dependency>
             <groupId>MyTraining</groupId>
             <artifactId>project</artifactId>
@@ -156,9 +150,6 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.20</version>
                 <configuration>
-                    <argLine>
-                        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
-                    </argLine>
                     <systemProperties>
                         <property>
                             <name>allure.results.directory</name>
@@ -166,13 +157,6 @@
                         </property>
                     </systemProperties>
                 </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.aspectj</groupId>
-                        <artifactId>aspectjweaver</artifactId>
-                        <version>${aspectj.version}</version>
-                    </dependency>
-                </dependencies>
             </plugin>

             <plugin>

我还在 my GitHub fork and created a pull request 中为您改进了 POM 中的一些小东西。喜欢就采纳吧