프로그램에서 두 개의 외부 jar 라이브러리를 사용하고 있습니다. 외부 라이브러리 X
에있는 클래스가 라이브러리의 클래스 m
을 호출하는 클래스입니다. 라이브러리 X
은 라이브러리 Y
의 버전 1.0으로 컴파일되었습니다. 그러나, 내 코드에서 다른 목적으로 라이브러리 Y
을 사용하고 있으므로, 마지막 버전을 사용하는 것을 선호합니다 (5.0이라고 가정 해보십시오). 제 문제는 코드를 실행할 때 라이브러리 X
이 더 이상 (NoSuchMethod 오류를 던지는) m
메서드가 없다는 것에 불평합니다. 그러나 그 방법이 있습니다.NoSuchMethod 오류가 최신 버전의 JAR 파일을 사용하려고합니다
이 문제는 컴파일 시간에 제공된 라이브러리보다 새로운 버전의 Y
을 사용하고 있다는 사실과 관련이있을 수 있습니까? (역방향 호환이 가능하지만 다른 바이트 코드가 있더라도?). 그렇다면 Java 메소드 호출이 기호 참조 (예 : 메소드 서명)로 표시되고 직접 참조 (예 : 오프셋)가 아닌 바이트 코드로 표시되었다고 생각하기 때문에 의아해 할 것입니다. 그러나 오해가있을 수 있습니다. 어떤 것.
설명해 주셔서 감사합니다.
실제로. 서명이 매우 미묘하게 바뀌 었습니다. 원래 버전의 메소드는 매개 변수로 'int'를 가지며 새 버전에서는 'long'입니다. 필자는 '호환 가능한'방법이 여전히 존재한다는 것을 확인하는 것일뿐, '정확한'방법이 아직 존재하지 않는다는 것을 깨닫지 못했다. 감사. – Sergio
@ 수르지 오 : 천만에요. 컴파일러가 자동으로 처리하는 것들, 즉 명백한 JVM 지원없이 암시적인 변환 변환, 공변 반환 등을 간과하는 것은 쉽습니다. – ruakh