Java SpringXD Kryo-shaded-3.0.3.jar和NoClassDefFoundError以及ClassNotFoundException和Enum

Java SpringXD Kryo-shaded-3.0.3.jar和NoClassDefFoundError以及ClassNotFoundException和Enum,java,rabbitmq,spring-integration,spring-xd,kryo,Java,Rabbitmq,Spring Integration,Spring Xd,Kryo,我刚刚注意到,我们在Spring XD的一个新数据流中面临着Kryo问题(我们计划很快跳转到Spring Cloud Data Flow,因此基于它的建议目前可能不适用:( 这是我看到的日志的一部分: Caused by: java.lang.NoClassDefFoundError: Lcom/xxx/yyy/MyEnumClassEnum; at java.lang.Class.getDeclaredFields0(Native Method) ~[na:1.8.0_212]

我刚刚注意到,我们在Spring XD的一个新数据流中面临着Kryo问题(我们计划很快跳转到Spring Cloud Data Flow,因此基于它的建议目前可能不适用:(

这是我看到的日志的一部分:

Caused by: java.lang.NoClassDefFoundError: Lcom/xxx/yyy/MyEnumClassEnum;
    at java.lang.Class.getDeclaredFields0(Native Method) ~[na:1.8.0_212]
    at java.lang.Class.privateGetDeclaredFields(Class.java:2583) ~[na:1.8.0_212]
    at java.lang.Class.getDeclaredFields(Class.java:1916) ~[na:1.8.0_212]
    at com.esotericsoftware.kryo.serializers.FieldSerializer.rebuildCachedFields(FieldSerializer.java:215) ~[kryo-shaded-3.0.3.jar:na]
    at com.esotericsoftware.kryo.serializers.FieldSerializer.rebuildCachedFields(FieldSerializer.java:182) ~[kryo-shaded-3.0.3.jar:na]
    at com.esotericsoftware.kryo.serializers.FieldSerializer.<init>(FieldSerializer.java:155) ~[kryo-shaded-3.0.3.jar:na]
    ... 60 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.xxx.yyy.MyEnumClassEnum
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_212]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_212]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[na:1.8.0_212]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_212]
    ... 66 common frames omitted
原因:java.lang.NoClassDefFoundError:Lcom/xxx/yyy/MyEnumClassEnum;
在java.lang.Class.getDeclaredFields0(本机方法)~[na:1.8.0_212]
在java.lang.Class.privateGetDeclaredFields(Class.java:2583)~[na:1.8.0212]
在java.lang.Class.getDeclaredFields(Class.java:1916)~[na:1.8.0_212]
在com.esotericsoftware.kryo.serializers.FieldSerializer.rebuildCachedFields(FieldSerializer.java:215)~[kryo-shade-3.0.3.jar:na]
在com.esotericsoftware.kryo.serializers.FieldSerializer.rebuildCachedFields(FieldSerializer.java:182)~[kryo-shade-3.0.3.jar:na]
在com.esotericsoftware.kryo.serializers.FieldSerializer.(FieldSerializer.java:155)~[kryo-shade-3.0.3.jar:na]
…省略了60个公共帧
原因:java.lang.ClassNotFoundException:com.xxx.yyy.MyEnumClassEnum
在java.net.URLClassLoader.findClass(URLClassLoader.java:382)~[na:1.8.0212]
在java.lang.ClassLoader.loadClass(ClassLoader.java:424)~[na:1.8.0_212]
在sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)~[na:1.8.0\u212]
在java.lang.ClassLoader.loadClass(ClassLoader.java:357)~[na:1.8.0_212]
…省略了66个公共帧
我还注意到,这只发生在Enum类中。Pojo对象中的一些字段是Enum,我看到它在那里失败了

编辑1: 我已经检查了与SpringXD模块相关的jar文件。在jar中,我找到了工件jar,打开了它,类就在里面。因此,这不是与jar中不存在的类相关的问题

我可能会共享POJO结构,因为它是自动生成的。可能枚举的序列化方式以及之后使用的方式是根本问题


知道只有Enum字段触发ClassNotFound NoClassDefFoundError,我应该如何处理这个问题?这仅仅意味着
com.xxx.yyy.MyEnumClassEnum
对类加载器不可见。您是否尝试查看实际的着色JAR(内部)看看它是否正确生成,类是否存在?是的。我已经打开了jar,它里面有类。基本上SpringXD自定义模块里面有jar和类,但是发生了一些事情,它没有找到。有趣的是,现在我显式地将包含类的jar放在xd/lib文件夹下,它解决了问题。但是现在我在同一pojo中的另一个Enum字段中得到了相同的错误,但是与该Enum相关的类也在jar中。我不想将包含该Enum类的jar移动到xd/文件夹中,因为这将是一个大混乱,对于我们正在处理的整个项目来说都不是。