You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SkyWalking Java Agent 9.4.0与ical4j 4.1.1类重定义冲突问题求助

SkyWalking Java Agent 9.4.0与ical4j 4.1.1类重定义冲突问题求助

各位大佬好,我最近在开发Spring Boot应用时遇到了个棘手的问题:SkyWalking Java Agent 9.4.0和ical4j 4.1.1库之间出现了类重定义冲突,导致应用直接启动失败,折腾好一阵都没搞定,来求助大家!

环境信息

  • SkyWalking Java Agent:9.4.0
  • SkyWalking Server:10.2.0
  • Java SDK:21
  • 框架:基于Jakarta EE的Spring Boot,搭配Spring Data JPA、Spring MVC
  • 问题依赖:ical4j(org.mnode.ical4j)版本4.1.1

问题现象

当我移除ical4j依赖时,应用搭配SkyWalking Agent能正常启动运行;但只要引入ical4j,启动瞬间就会触发类重定义失败的错误,直接崩溃。

错误栈信息

java.lang.UnsupportedOperationException: class redefinition failed: attempted to change superclass or interfaces
    at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
    at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:225)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at org.apache.skywalking.apm.dependencies.net.bytebuddy.utility.Invoker$Dispatcher.invoke(Unknown Source)
    at org.apache.skywalking.apm.dependencies.net.bytebuddy.utility.dispatcher.JavaDispatcher$Dispatcher$ForNonStaticMethod.invoke(JavaDispatcher.java:1032)
    at org.apache.skywalking.apm.dependencies.net.bytebuddy.utility.dispatcher.JavaDispatcher$ProxiedInvocationHandler.invoke(JavaDispatcher.java:1162)
    at org.apache.skywalking.apm.dependencies.net.bytebuddy.agent.builder.$Proxy46.retransformClasses(Unknown Source)
    at org.apache.skywalking.apm.dependencies.net.bytebuddy.agent.builder.AgentBuilder$RedefinitionStrategy$Collector$ForRetransformation.doApply(AgentBuilder.java:8336)
    at org.apache.skywalking.apm.dependencies.net.bytebuddy.agent.builder.AgentBuilder$RedefinitionStrategy$Collector.apply(AgentBuilder.java:8151)
    at org.apache.skywalking.apm.dependencies.net.bytebuddy.agent.builder.AgentBuilder$RedefinitionStrategy.apply(AgentBuilder.java:5848)
    at org.apache.skywalking.apm.dependencies.net.bytebuddy.agent.builder.AgentBuilder$Default.doInstall(AgentBuilder.java:11462)
    at org.apache.skywalking.apm.dependencies.net.bytebuddy.agent.builder.AgentBuilder$Default.installOn(AgentBuilder.java:11362)
    at org.apache.skywalking.apm.agent.SkyWalkingAgent.installClassTransformer(SkyWalkingAgent.java:152)
    at org.apache.skywalking.apm.agent.SkyWalkingAgent.premain(SkyWalkingAgent.java:105)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:560)
    at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:572)

问题分析

根据错误信息我大概判断:SkyWalking Agent在尝试重转换ical4j的类(org.mnode.ical4j.*下的类)时,发现这些类已经被加载,且它们的超类或接口定义和Agent要修改后的定义不一致,导致类重定义操作直接失败,进而触发启动异常。

已尝试的解决方法

我已经在SkyWalking的agent.config里调整了一堆配置,试图让Agent跳过对ical4j类的处理,但都没效果:

  • agent.class_cache_mode=OFF
  • agent.is_cache_enhanced_class=false
  • agent.is_open_debugging_class=true
  • agent.is_parallel_class_transform=false
  • agent.trace.ignore_path=/org/mnode/**,org/mnode/ical4j/**
  • plugin.toolkit.log.ignore_filters=org.mnode.ical4j.*

现在实在没思路了,想请教各位:有没有办法让SkyWalking Agent完全跳过对ical4j所有类的增强和转换?或者还有其他可行的解决方向吗?

内容来源于stack exchange

火山引擎 最新活动