调试故事:不兼容类更改错误


不兼容类类更改错误,很像它的表亲NoSuchMethodError,表示您所依赖的类自上次编译后已经更改。

在我的例子中,jvm告诉我,我一直在调用的方法已经从静态变为非静态。这是一个很好的解释。您可以重新编译,修复编译错误,应该可以开始了。

或者不是。

我根据库的最新版本巴丽编译了我的更改,并将巴丽添加到类路径中。不幸的是,jvm说类org.foo.Test.getInstance方法已经从静态变成了非静态。呃,我编译的时候是静态的?

原来有人将org.foo.Test类复制到libB中,并将方法改为非静态的。我将libB引入到我的类路径中的一种传递依赖关系,在我的类路径中有两个不兼容的同一个类的定义。其中一个在我编译时被拉出来,另一个在我运行时被拉出来。(有人一直是个懒汉!(

提示:要找到包含类的jar,

find . -iname *.jar | while read JAR; do jar tvf $JAR | grep 'org.foo.Test' && echo $JARF ; done