我有一个Spring web应用程序,它可以在“特殊”模式下运行,其中mockito用于监视某些对象。其中一些对象是最终的(协议消息)。我知道,这听起来可能是个坏主意,但我们可以说这是一个实验。当启用mock-maker-inline
扩展以便可以窥探最终对象时,我遇到了似乎与字节伙伴和加载一些本地库有关的问题。在不使用扩展(并且不监视最终类)的情况下,一切都按预期进行。下面是截断的堆栈跟踪。
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
…
Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in sun.misc.CompoundEnumeration@60cc2b75
…
Caused by: java.lang.reflect.InvocationTargetException
…
Caused by: org.mockito.exceptions.base.MockitoInitializationException:
Could not initialize inline Byte Buddy mock maker.
It appears as if your JDK does not supply a working agent attachment mechanism.
Java : 1.8
JVM vendor name : AdoptOpenJDK
JVM vendor version : 25.265-b01
JVM name : OpenJDK 64-Bit Server VM
JVM version : 1.8.0_265-b01
JVM info : mixed mode
OS name : Mac OS X
OS version : 10.15.7
…
Caused by: java.lang.IllegalStateException: Error during attachment using: net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Compound@633c165e
…
Caused by: java.lang.reflect.InvocationTargetException
…
Caused by: java.lang.UnsatisfiedLinkError: Native Library /Users/…/.sdkman/candidates/java/8.0.265.hs-adpt/jre/lib/libattach.dylib already loaded in another classloader
发布于 2021-07-30 19:50:27
这是JVM的一个不幸的限制,它在Java中得到了解决。在Java 8中,附着库只能由单个类加载器绑定。似乎Byte Buddy和另一个库尝试自连接(可能是EhCache)并绑定虚拟机API。
你能识别出哪些库是自连接的,并可能防止这种情况发生吗?
https://stackoverflow.com/questions/68580909
复制相似问题