1.问题场景
school-1.1.0.jar中没有Student类。school-1.1.1.jar中有Student类。
虽然在pom中指定了引入的是school-1.1.1.jar,但可能maven打包后只有school-1.1.0.jar而没有school-1.1.1.jar。那么运行时就会报错java.lang.NoClassDefFoundError。
2.命令
#执行此命令,可以看指定目录下哪些jar包中有哪些类,含有指定关键字。 for i in xxx/lib/*.jar; do jar -tvf $i | grep 'MessageOrBuilder' && echo $i ; done
执行效果见图2-1.
图2-1 查看哪个jar包中有哪些文件
2.1 jar
存在于jdk的bin/目录下,用于查看jar包中的内容。
jar -tvf file
查看指定jar中有哪些文件,也即哪些类,显示示例见下行:
1265 Thu Jan 13 23:06:38 CST 2011 org/apache/commons/lang/time/FastDateFormat$UnpaddedMonthField.class
3.经验
如果lib/目录下只有低版本的包,没有高版本的包,可以尝试把高版本的<dependency>配置放在最前面。