Maven开源Clover插件报NoSuchMethodError问题求助
我之前帮好几个开发者搞定过这个问题,你遇到的java.lang.NoSuchMethodError: com_atlassian_clover.CloverVersionInfo.An_old_version_of_clover_is_on_your_compilation_classpath错误,本质就是编译类路径里同时存在新旧两个版本的Clover依赖,导致版本冲突——你用的是4.2.0/4.2.1的插件,但某个依赖偷偷引入了更老的Clover jar,两者的类结构不兼容就抛出了这个错误。
给你几个针对性的解决步骤:
第一步:定位旧版Clover的来源
先执行Maven命令查看项目的依赖树,找出哪个依赖引入了旧版Clover:mvn dependency:tree | grep clover执行后你会看到类似
com.atlassian.clover:clover:jar:2.xxx:compile这样的旧版本条目,前面的父依赖就是罪魁祸首。第二步:排除旧版Clover依赖
在引入旧版Clover的那个依赖节点里,添加排除规则,把旧版Clover踢出去。举个例子:<dependency> <groupId>你的依赖GroupId</groupId> <artifactId>你的依赖ArtifactId</artifactId> <version>你的依赖版本</version> <exclusions> <exclusion> <groupId>com.atlassian.clover</groupId> <artifactId>clover</artifactId> </exclusion> </exclusions> </dependency>第三步:清理本地Maven缓存
有时候本地仓库里的旧依赖缓存会搞事情,执行下面的命令强制清理并重新安装依赖:mvn clean install -U第四步:检查Clover插件的配置
确保你的Maven Clover插件配置里,没有手动引入旧版本的Clover依赖。比如插件的<dependencies>块里,不要出现低于4.2.0的clover artifact。额外注意点
有些第三方测试库可能会内置Clover的旧字节码(不是显式依赖),如果上面的步骤没用,可以检查项目的测试依赖,看看有没有这类库,必要时替换成不含Clover的版本。
内容的提问来源于stack exchange,提问作者Alexandra Yarosh

