为什么我的方法抛出NoSuchMethodError?

Jef*_*rey 2 java equals nosuchmethoderror

我已成功实现了reflectionEquals方法,其中包含一个排除字段列表.

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

但是,我最近在Java 1.5上编译了我的程序,现在当程序遇到上述行时出现以下错误:

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

如果有人了解该方法在运行时不存在的原因,我将不胜感激

Jar*_*red 8

我遇到的每个NoSuchMethodError(最终)都发现在编译时类路径上的外部库版本与运行时类路径上的库版本不匹配(即 - 在这种情况下,编译应用程序时,在类路径上有一个不同版本的apache commons,而不是运行时.)

当您的代码被编译时,该方法肯定存在 - 或者抛出了编译器错误.

检查类路径上的commons-lang.jar的版本 - 我打赌你会发现不匹配.

值得注意的是,这不是一个MISSING jar文件 - 会抛出一个ClassNotFoundException(最终可能会跟一个NoClassDefFoundError.)