AspectJ- 从另一个项目调用方面函数抛出 NoClassDefFoundError: org/aspectj/lang/JoinPoint

问题描述

要求: - 我们在 methodA 中有一个 Java ProjectA。此 methodA 通过将 JAR 依赖项添加到他们的 POM 来跨不同团队使用。我们想收集一些指标,例如哪些团队在调用 methodA

想法:我正在探索在我的非 Spring 项目中使用 AspectJ。

问题:ProjectB 中,我们添加ProjectA 依赖项并调用methodA,但最终得到以下错误

java.lang.NoClassDefFoundError: org/aspectj/lang/Signature

项目 A:

src/main/javaAspectClass.java 具有要监控的方法的周围和切入点

@Around("execution(* com.aspectj.CommonClass.*(..))")
public Object around(ProceedingJoinPoint point) throws Throwable {
  System.out.println("Function monitored");
}

src/main/java/com/aspectj/CommonClass/methodA

pom.xml添加的依赖项是 aspectjrtaspectjweaver 和 Surefire 插件

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.9</version>
  <configuration>
    <argLine>-XX:-UseSplitVerifier</argLine>
    <argLine>-javaagent:C:\Users\**\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar</argLine>
  </configuration>
</plugin>

aspectj-maven-plugin

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>aspectj-maven-plugin</artifactId>
  <version>1.7</version>
  <configuration>
    <showweaveInfo>true</showweaveInfo>
    <source>1.8</source>
    <target>1.8</target>
    <Xlint>ignore</Xlint>
    <complianceLevel>1.8</complianceLevel>
    <encoding>UTF-8</encoding>
    <verbose>true</verbose>
  </configuration>
  <executions>
    <execution>
      <!-- IMPORTANT -->
      <phase>process-sources</phase>
      <goals>
        <goal>compile</goal>
        <goal>test-compile</goal>
      </goals>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjtools</artifactId>
      <version>${aspectj.version}</version>
    </dependency>
  </dependencies>
</plugin>

项目 B:

pom.xml 依赖于 ProjectA

在测试课程中,我调用methodAProjectA,但收到以下错误

java.lang.NoClassDefFoundError: org/aspectj/lang/Signature

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)