集成scoverage-maven-plugin遇NoSuchMethodError问题求助
解决scoverage-maven-plugin的java.lang.NoSuchMethodError问题
这个错误本质是Scala版本与scoverage插件/依赖版本不兼容,或者依赖引入方式错误导致的方法签名不匹配,以下是具体解决步骤:
1. 严格匹配Scala与scoverage插件版本
不同版本的scalac-scoverage-plugin对应固定的Scala版本范围,必须对齐:
- Scala 2.12.x → 使用
scalac-scoverage-plugin_2.12的1.4.x系列版本 - Scala 2.13.x → 使用
scalac-scoverage-plugin_2.13的1.5.x+系列版本 - Scala 3.x → 使用
scalac-scoverage-plugin_3的2.x+系列版本
2. 修正POM中插件的正确配置方式
不要把scala-compiler和scalac-scoverage-plugin放到项目的<dependencies>里,而是要在scoverage-maven-plugin的内部依赖中声明,确保插件使用的依赖版本与项目一致:
<build> <plugins> <plugin> <groupId>org.scoverage</groupId> <artifactId>scoverage-maven-plugin</artifactId> <version>1.4.11</version> <!-- 替换为对应Scala版本的兼容版本 --> <executions> <execution> <goals> <goal>report</goal> </goals> </execution> </executions> <dependencies> <!-- 注意artifactId的Scala版本后缀要和项目完全一致 --> <dependency> <groupId>org.scoverage</groupId> <artifactId>scalac-scoverage-plugin_2.12</artifactId> <version>1.4.11</version> </dependency> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-compiler</artifactId> <version>2.12.17</version> <!-- 项目实际使用的Scala版本 --> </dependency> </dependencies> </plugin> </plugins> </build>
3. 清理缓存并重新构建
执行以下命令清理本地缓存的旧依赖,强制重新拉取正确版本:
mvn clean install -U
4. 排查依赖冲突
用依赖树命令检查是否有其他依赖引入了不兼容的scala-compiler版本:
mvn dependency:tree | grep scala-compiler
如果发现冲突,在对应的依赖中添加排除规则:
<dependency> <groupId>你的依赖groupId</groupId> <artifactId>你的依赖artifactId</artifactId> <version>你的依赖版本</version> <exclusions> <exclusion> <groupId>org.scala-lang</groupId> <artifactId>scala-compiler</artifactId> </exclusion> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者Ignacio Alorre
相关产品推荐
相关产品推荐

