有一个依赖,父类pom有是一个版本是1.1,但是很老了,是公共使用的。 A模块–>引用–>B模块 ,B模块中是3.3,B模块也引用C父模块 A模块的父模块C是1.1的版本。 新的方法在3.3版本中,于是在B模块中覆盖了该依赖,所以编译没问题。
如题,引入了一个maven依赖,编译时没问题,但是到了,运行时就报
java.lang.NoSuchMethodError
错误
1、首先排查是不是本地maven仓库的历史依赖,但是我依赖的别人的包被重新deploy了,于是很彻底 删除本地仓库依赖的jar包,重新引入,发现依赖包没变,一切照旧。 还是3.3
2、将A模块打包出来的jar包打开看了下,依赖变为了1.1
在本地执行如下命令:
mvn dependency:tree > temp.txt
发现A模块,仍然引用的1.1版本,只有B模块用的3.3版本,所以在其他模块未使用新方法的时候,编译肯定可以通过,而我在引用了3.3的模块中,也没问题。 但是在A模块打包过程中,它不会使用B模块中的3.3版本,而是会引用父模块C的1.1版本。
改变父类的POM的依赖为3.3,或者在A模块中覆盖父模块的1.1