配置maven-release-plugin使用shallow选项遇NoSuchFieldError错误如何解决?
解决maven-release-plugin与maven-scm-provider-gitexe的SHALLOW字段兼容性问题
这个错误java.lang.NoSuchFieldError: SHALLOW的核心原因是maven-release-plugin的版本与你引入的maven-scm-provider-gitexe版本不兼容:
- 你使用的maven-scm-provider-gitexe 1.10.0依赖的是
maven-scm-api 1.10.0,其中新增了SHALLOW字段; - 而你原来的maven-release-plugin 2.3.2/2.5.3默认依赖的是更低版本的
maven-scm-api(比如2.5.3依赖的是1.9.5),这个版本里并没有SHALLOW字段,导致运行时出现字段找不到的错误。
解决方案:统一SCM组件版本
你需要在maven-release-plugin的依赖中同时指定maven-scm-api和maven-scm-provider-gitexe的版本为1.10.0,覆盖插件自带的低版本依赖,确保API和实现版本一致。
修改后的pom配置如下:
<properties> <shallow>true</shallow> </properties> <pluginManagement> <plugins> <plugin> <artifactId>maven-release-plugin</artifactId> <!-- 可以继续使用2.5.3版本,只要统一SCM依赖版本即可 --> <version>2.5.3</version> <dependencies> <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-api</artifactId> <version>1.10.0</version> </dependency> <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-provider-gitexe</artifactId> <version>1.10.0</version> </dependency> </dependencies> </plugin> </plugins> </pluginManagement>
额外说明
如果后续还是遇到类似兼容性问题,建议查看maven-release-plugin的官方依赖信息,确认其默认依赖的maven-scm组件版本,确保你引入的SCM实现版本与插件依赖的API版本完全匹配。
内容的提问来源于stack exchange,提问作者Ashley Taylor
相关产品推荐
相关产品推荐

