Я пытаюсь создать ссылку на стороннюю библиотеку (в файле jar) в Intellij Community 2019.1.Когда я собираю и запускаю свой проект, он завершается сбоем во время выполнения с сообщением:
"Exception in thread "main" java.lang.NoSuchMethodError".
Что происходит, если упомянутая библиотека имеет две зависимости, назовем их A.jar и B.jar.Оба они предоставляют класс с именем «Foo» с одинаковым путем к пакету, например acme.com.util.Foo.
Проблема в том, что класс Foo из A.jar реализует метод test(Class1 c)
, но тот же класс из пакетаB.jar реализует метод test(Class2 c)
.
Код (из сторонней библиотеки) имеет следующую сигнатуру вызова:
import acme.com.util
Class1 c = new Class1();
foo.test(c)
Поэтому теоретически IntelliJ должен разрешить его в пакет A.jar, но вместо этого код скомпилирован так, что во время выполнения он вызывает test(Class2 c)
из пакета B.jar.Когда я нажимаю Ctrl по методу foo.test(c)
, это также приводит меня к реализации Foo внутри B.jar.Я пытался использовать разные компиляторы в IntellJ (как Javac, так и Eclipse), с тем же результатом.
Интересно, что при использовании Eclipse IDE проблема не возникает.Интересно, как это можно исправить или, может быть, есть способ убедить IntelliJ выбрать правильный пакет?