【发布时间】:2021-01-15 13:40:14
【问题描述】:
当我运行我的单元测试时,我从构建的测试运行阶段收到抱怨说我的类路径中有一个重复的类。我最近没有更改我的依赖项,所以这很令人惊讶。
[junit] 线程“Thread-4”中的异常 java.lang.LinkageError: loader (org/powermock/core/classloader/MockClassLoader 的实例): 尝试重复的名称类定义: "org/apache/log4j/pattern/Log4j1MdcPatternConverter"
当我尝试使用@PowerMockIgnore 注释排除该模式时,相关类会发生变化,例如,如果我这样做:
@PowerMockIgnore({"org.apache.log4j.pattern.Log4j1MdcPatternConverter"})
它只是抱怨另一个重复的类,如 Log4j1XmlLayout 或 Log4j1NdcPatternConverter。我可能可以蛮力排除哪些,但是在知道要使用的排除模式之前,有没有人看到过这个问题?我使用的格式类似于this question about LinkageErrors in unit tests,但用于不同的类。
其他一些问题和答案提到他们改变了他们与 log4j 和其他 Apache 相关包的依赖关系的顺序;在这种情况下,我无法更改依赖项的加载顺序,因为我无法在构建环境中控制它们(即我无法在 Maven 或 Gradle 中更改某些内容)。我正在寻找可能的最小更改,这应该只是在失败的测试类的顶部放置一个 PowerMockIgnore 注释。
【问题讨论】:
标签: java junit log4j powermock powermockito