Linux下Tomcat9启动Jacoco Agent失败:LinkageError异常求助
Linux下Tomcat9启动Jacoco代理报错的解决方案
核心报错信息:
Caused by: java.lang.LinkageError: loader 'bootstrap' attempted duplicate class definition for java.lang.$JaCoCo. (java.lang.$JaCoCo is in module java.base of loader 'bootstrap')
这说明Jacoco代理尝试在bootstrap类加载器中重复定义java.lang.$JaCoCo类,导致启动失败。以下是针对性解决方案:
排查重复的Jacoco代理配置
检查Tomcat的catalina.sh、系统环境变量JAVA_OPTS或CATALINA_OPTS,确保只添加一次-javaagent指向Jacoco代理jar的配置,避免重复注入代理。清理Tomcat临时文件
删除Tomcat的work和temp目录下的所有文件,清除可能残留的旧代理类文件:rm -rf /path/to/tomcat/work/* rm -rf /path/to/tomcat/temp/*调整Jacoco代理参数
在-javaagent参数中添加classdumpdir,指定类文件输出目录,方便排查重复加载问题:-javaagent:/home/jenkins/tools/jacoco/lib/jacocoagent.jar=port=6300,destfile=/home/jenkins/jacoco/jacoco.exec,output=tcpserver,includes=myPackage.*,append=false,classdumpdir=/tmp/jacoco_classes也可以尝试通过
-Xbootclasspath/a指定Jacoco代理的类路径,避免bootstrap类加载器冲突:-Xbootclasspath/a:/home/jenkins/tools/jacoco/lib/jacocoagent.jar -javaagent:/home/jenkins/tools/jacoco/lib/jacocoagent.jar=port=6300,destfile=/home/jenkins/jacoco/jacoco.exec,output=tcpserver,includes=myPackage.*,append=false检查Jenkins配置
若通过Jenkins启动Tomcat,确认Jenkins中没有其他任务或插件重复配置Jacoco代理,同时检查全局工具配置中Jacoco路径是否正确。升级Jacoco版本
当前使用的Jacoco 0.8.10存在JDK11下的类加载兼容问题,尝试升级到最新稳定版(如0.8.12及以上),新版本可能修复此类冲突。
内容的提问来源于stack exchange,提问作者Mathieu
相关产品推荐
相关产品推荐

