如何使用AspectJ maven插件

时间:2018-06-10 18:37:11

标签: maven testng aspectj aspectj-maven-plugin

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

[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>块的依赖项,并将我的项目的依赖项添加到pom的<dependencies>块中.XML。但问题在于:

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

这是我project

的链接

请给我建议。我错过了什么?我做错了什么?我想学习如何使用方面。

1 个答案:

答案 0 :(得分:0)

构建中的问题是您使用编译时编织,然后使用加载时编织代理运行测试。后者不是必需的。 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的POM中改进了一些小东西,并为你创建了pull request。如果你愿意,可以接受它。