我正在尝试链接到Intellij Community 2019.1中的第三方库(在jar文件中)。 当我构建并运行项目时,它最终在运行时崩溃并显示一条消息:
"Exception in thread "main" java.lang.NoSuchMethodError".
发生的事情是所提到的库具有两个依赖项,我们将它们称为A.jar和B.jar。两者都提供了具有相同包路径的名为“ Foo”的类,例如acme.com.util.Foo.
问题在于A.jar中的Foo类实现了方法test(Class1 c)
,而包B.jar中的同一类实现了方法test(Class2 c)
。
(第三方库的)代码具有以下呼叫签名:
import acme.com.util
Class1 c = new Class1();
foo.test(c)
因此,从理论上讲,IntelliJ应该将其解析为A.jar包,但应编译代码,以便在运行时从B.jar包中调用test(Class2 c)
。按住Ctrl键单击foo.test(c)
的方法时,它还会带我进入B.jar中Foo的实现。
我试图在IntellJ(Javac或Eclipse)中使用不同的编译器,但结果相同。
有趣的是,当我使用Eclipse IDE时,该问题不会发生。 我想知道如何修复它,或者是否有一种方法可以指导IntelliJ选择正确的软件包?