PowerMock+Mockito 报错 Could not reconfigure JMX java.lang.LinkageError解决方案(原理待更新)

一、项目背景

在公司写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:

你可能感兴趣的:(java,web)