【问题标题】:How to run my java tests with AspectJ maven plugin如何使用 AspectJ maven 插件运行我的 java 测试
【发布时间】:2018-06-10 18:37:11
【问题描述】:

我想通过 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> bloc,并将我的项目的依赖添加到pom.xml的<dependencies> bloc。但问题在于:

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

这是我的project的链接

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

【问题讨论】:

    标签: maven testng aspectj aspectj-maven-plugin


    【解决方案1】:

    构建中的问题是您使用编译时编织,然后使用加载时编织代理运行测试。后者不是必需的。 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。喜欢就收下吧。

    【讨论】:

    • 是的!现在一切正常。 Load-time weaving agent在maven-surefire-plugin中,因为它是allure-testng框架规定的,需要制作测试报告。在 surefire-plugin 中删除此代理和依赖 aspectjweaver 后,仍在生成报告。如果有人想在他们的测试框架中添加方面,请查看我的pom.xml@kriegaex,谢谢你的帮助,现在我很高兴:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2016-01-20
    • 2011-04-08
    • 2011-01-12
    • 2021-01-16
    相关资源
    最近更新 更多