如何解决AspectJ LTW配置中‘指定切面AspectLogger未找到’错误?
问题:JBoss EAP 7.2中AspectJ加载时织入(LTW)配置报错找不到切面类
我正尝试在基于Servlet、JSP(未使用Spring)且部署于JBoss EAP 7.2的Java Web应用中配置AspectJ加载时织入(LTW),以记录方法执行时间。已创建切面并将其与aop.xml配置文件打包为JAR,但运行应用时遇到核心错误:
The specified aspect 'com.sample.AspectLogger' cannot be found.
JBoss控制台完整日志
2024-08-05 09:45:05,159 ERROR [stderr] (MSC service thread 1-2) [ModuleClassLoader@17497425] info AspectJ Weaver Version 1.9.2 built on Wednesday Oct 24, 2018 at 15:43:33 GMT 2024-08-05 09:45:05,160 ERROR [stderr] (MSC service thread 1-2) [ModuleClassLoader@17497425] info register classloader org.jboss.modules.ModuleClassLoader@17497425 2024-08-05 09:45:05,161 ERROR [stderr] (MSC service thread 1-2) [ModuleClassLoader@17497425] info using configuration /C:/apps/jboss-eap-7.2.0/standalone/lib/aop.xml 2024-08-05 09:45:05,163 ERROR [stderr] (MSC service thread 1-2) [ModuleClassLoader@17497425] info register aspect com.sample.AspectLogger 2024-08-05 09:45:05,164 ERROR [stderr] (MSC service thread 1-2) [ModuleClassLoader@17497425] error The specified aspect 'com.sample.AspectLogger' cannot be found
已完成的操作
1. 切面类代码(AspectLogger.java)
package com.sample; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; public class AspectLogger { @Around("execution(* com.webservices..*(..))") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long start = System.currentTimeMillis(); Object proceed = joinPoint.proceed(); long executionTime = System.currentTimeMillis() - start; System.out.println(joinPoint.getSignature() + " executed in " + executionTime + "ms"); return proceed; } }
2. aop.xml配置文件
<aspectj> <weaver options="-verbose -showWeaveInfo"> <include within="com.webservices..*"/> </weaver> <aspects> <aspect name="com.sample.AspectLogger"/> </aspects> </aspectj>
3. 导出的JAR结构
C:. | .classpath | .project | +---com | \---sample | AspectLogger.class | +---lib | aspectj-1.9.2.jar | aspectjrt-1.9.2.jar | aspectjtools-1.9.2.jar | aspectjweaver-1.9.2.jar | \---META-INF aop.xml MANIFEST.MF
4. Java Agent参数配置
set "ASPECT_HOME=C:\apps\jboss-eap-7.2.0\standalone\lib" set "JAVA_OPTS=%JAVA_OPTS% -Djboss.modules.system.pkgs=org.aspectj -Dorg.aspectj.weaver.loadtime.debug=true -Dorg.aspectj.weaver.loadtime.configuration=%ASPECT_HOME%\aop.xml -Xbootclasspath/a:%ASPECT_HOME%\aspectjweaver-1.9.2.jar:%ASPECT_HOME%\SampleLogger.jar -Dorg.aspectj.tracing.enabled=false -Dorg.aspectj.tracing.factory=default" rem Uncomment below line to enable Aspect load-time weaving set "JAVA_OPTS=%JAVA_OPTS% -javaagent:%ASPECT_HOME%\aspectjweaver-1.9.2.jar -cp %ASPECT_HOME%\*"
额外说明
启动JBoss后服务器与Web应用均部署成功,虽已在JVM参数中指定aop.xml路径,但仍将其放在META-INF目录中;若移除JVM参数中的配置,仅保留META-INF中的aop.xml,织入器甚至无法找到它,日志无相关输出。
请求
请定位问题并使日志功能正常运行。
内容的提问来源于stack exchange,提问作者Vinod
相关产品推荐
相关产品推荐

