2009-05-14 4 views
2

나는 제외 된 필드의 목록으로 reflectionEquals 메소드를 성공적으로 구현했습니다. 프로그램이 위의 줄을 칠 때내 메서드가 NoSuchMethodError를 throw하는 이유는 무엇입니까?

return EqualsBuilder.reflectionEquals(this, obj, new String[] {"files", "notes", "status"}); 

그러나, 나는 최근에 자바 1.5에 내 프로그램을 컴파일하고 지금은 다음과 같은 오류가 발생합니다 :

java.lang.NoSuchMethodError: org.apache.commons.lang.builder.EqualsBuilder.= reflectionEquals(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/String;)Z

사람이 방법은하지 않는 이유에 대한 통찰력이있는 경우 런타임에 존재한다면, 고맙겠습니다.

답변

0

런타임 클래스 경로에 이전 버전이있을 수 있습니다.

이것은 가능성이 var에 인수 문제입니다 Apache Commons Lang

1

의 최신 버전을 가져옵니다. Java 1.5의 모든 것을 다시 컴파일하고 반드시 Java 1.5에서 실행해야하며 컴파일시 런타임시와 동일한 jar를 참조해야합니다.

+0

내가 그의 마지막 인수가 배열이기 때문에, 의심 Object가 아닌 다른 유형. Object []를 사용할 때나 null을 사용할 때 (일반적으로 모호한 생성자가 발생할 수 있음) 문제가 발생합니다. – mihi

8

내가 만난 모든 NoSuchMethodError가 클래스 경로에있는 외부 라이브러리 버전과 런타임에 클래스 경로에있는 라이브러리 버전 사이의 불일치로 밝혀졌습니다 (예 : 이 경우 애플리케이션이 컴파일 될 때 클래스 패스에 다른 버전의 아파치 커먼을 가지고있을 것이다.)

코드가 컴파일되었을 때 메소드가 분명히 존재했다. 던졌습니다.

클래스 경로에서 commons-lang.jar의 버전을 확인하십시오. 불일치를 찾게 될 것입니다.

이것이 하지 jar 파일이 누락되어 있음을 주목할 필요가 - (. 어쩌면 결국 NoClassDefFoundError를 다음) ClassNotFoundException가 던질 것이라고