PowerMock+Mockito 报错 Could not reconfigure JMX java.lang.LinkageError解决方案(原理待更新)
程序员文章站
2022-04-27 10:57:59
...
一、项目背景
在公司写UT的时候,当使用了PowerMock+Mockito去模拟类的时候,出现报错,虽然没有影响运行结果,但是报错了就必须要解决
2019-03-06 16:55:23,685 main ERROR Could not reconfigure JMX java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading for a different type with name "javax/management/MBeanServer"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at org.powermock.core.classloader.MockClassLoader.loadUnmockedClass(MockClassLoader.java:262)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:206)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass1(DeferSupportingClassLoader.java:89)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:79)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.apache.logging.log4j.core.jmx.Server.unregisterAllMatching(Server.java:335)
at org.apache.logging.log4j.core.jmx.Server.unregisterLoggerContext(Server.java:259)
at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:164)
at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:140)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:556)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
二、解决方案
通过错误关键字查阅相关外文网站,最后在Ryan的私人博客中找到解决方案
只需要在项目中添加注解
@PowerMockIgnore({"javax.management.*"})
以下为外文链接
Ryan Chapin: Full-Stack Software Architect/Engineer, Drummer, Motorcyclist, Artist
三、解决方案原理
目前只知道是通过@PowerMockIgnore
去忽略掉classloader错误
具体原理待更新
TODO:
上一篇: 如何生成包含静态文件的页面快照?
下一篇: php实现简易聊天室应用代码_php技巧