Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Junit无法与java.lang.LinkageError一起运行,名称的类定义与log4j类重复_Java_Junit_Log4j_Powermock_Powermockito - Fatal编程技术网

Junit无法与java.lang.LinkageError一起运行,名称的类定义与log4j类重复

Junit无法与java.lang.LinkageError一起运行,名称的类定义与log4j类重复,java,junit,log4j,powermock,powermockito,Java,Junit,Log4j,Powermock,Powermockito,当我运行我的单元测试时,我从构建的测试运行阶段收到抱怨,我的类路径中有一个重复的类。我最近没有改变我的依赖关系,所以这是令人惊讶的 线程“thread-4”java.lang.LinkageError中的[junit]异常:loader (org/powermock/core/classloader/MockClassLoader实例): 尝试为名称复制类定义: “org/apache/log4j/pattern/Log4j1MdcPatternConverter” 当我尝试使用@PowerMo

当我运行我的单元测试时,我从构建的测试运行阶段收到抱怨,我的类路径中有一个重复的类。我最近没有改变我的依赖关系,所以这是令人惊讶的

线程“thread-4”java.lang.LinkageError中的[junit]异常:loader (org/powermock/core/classloader/MockClassLoader实例): 尝试为名称复制类定义: “org/apache/log4j/pattern/Log4j1MdcPatternConverter”

当我尝试使用
@PowerMockIgnore
注释排除该模式时,所讨论的类会发生变化,例如,如果我执行以下操作:

@PowerMockIgnore({"org.apache.log4j.pattern.Log4j1MdcPatternConverter"})
它只是抱怨另一个被复制的类,比如log4j1xmlayout或Log4j1NdcPatternConverter。我可能可以强制排除哪些,但是以前有谁见过这个问题,谁知道要使用的排除模式呢?我将使用的格式与类似,但用于不同的类


其他一些问题和答案提到,他们改变了与log4j和其他Apache相关包的依赖关系的顺序;在这种情况下,我无法更改依赖项的加载顺序,因为我无法在构建环境中控制它们(即,我无法在Maven或Gradle中更改某些内容)。我正在寻找尽可能小的更改,这应该只是在失败的测试类的顶部放置一个PowerMockIgnore注释。

经过大量的暴力之后,这是一种使测试运行时不会出现重复类投诉的模式(将其放在类的顶部)

注意必须排除的各个类,没有通配符,以使其加载并运行

@PowerMockIgnore({
    "org.apache.log4j.pattern.Log4j1MdcPatternConverter",
    "org.apache.log4j.pattern.Log4j1NdcPatternConverter",
    "org.apache.log4j.layout.Log4j1XmlLayout",
    "org.apache.logging.log4j.*",
    "org.apache.logging.log4j.core.*"
})