Java Intellij导入了错误的类

Java Intellij导入了错误的类,java,intellij-idea,Java,Intellij Idea,我正在尝试链接到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(class1c)

我正在尝试链接到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(class1c)
,而包B.jar中的同一个类实现了一个方法
test(class2c)

(第三方库的)代码具有以下调用签名:

import acme.com.util
Class1 c = new Class1();
foo.test(c)
因此,理论上IntelliJ应该将其解析为包A.jar,但是代码被编译,以便在运行时从包B.jar调用
test(class2c)
。当我按住Ctrl键单击
foo.test(c)
的方法时,它也会将我带到B.jar中foo的实现。 我尝试在IntellJ中使用不同的编译器(Javac或Eclipse),结果是一样的

有趣的是,当我使用EclipseIDE时,问题并没有发生。
我想知道如何修复它,或者是否有一种方法可以指导IntelliJ选择正确的软件包

作为开发人员,您是决定导入哪个类的人。IntelliJ可以提出建议,但一旦您选择选项A,IntelliJ将在遇到错误时,假设您在选择选项A时知道自己想要什么,并且不会在第二个类中查看该选项是否有意义。当我导入第三方库时(这反过来取决于A.jar和B.jar)如何选择要导入的类?第三方库也在不同的地方使用了A和B,就在这里,在他们的代码中,从错误的类导入了错误的方法。首先从类路径加载的一个类将被加载。您不能在类路径中同时使用它们,JRE应该如何选择何时使用它们?这不是Intellijt的问题。我看到有三种方法可以解决这个问题。可以自己指定类路径,也可以排除不需要的依赖项(如果可以的话)。或者使用osgi,但这是一个很长的机会