使用Java Money API做USD转EUR时报DefaultMonetaryConversionsSingletonSpi实例化错误
Java Money API 实例化报错排查解决
错误根因
你遇到的报错核心是依赖配置错误和版本不兼容问题:
- 依赖中给
moneta指定了<type>pom</type>,导致实现类的jar包没有被正确引入项目 - 1.2.1版本的
moneta与对应的Java Money API规范版本方法签名不匹配,触发NoSuchMethodError
排查步骤
- 打开Eclipse中pom.xml的「Dependency Hierarchy」视图,搜索
javax.money、org.javamoney相关依赖,排查是否存在多版本冲突的情况,排除其他依赖传递引入的低版本API包 - 检查当前moneta依赖配置是否存在多余的type配置
解决步骤
- 修正pom依赖配置,删除
moneta依赖的<type>pom</type>配置,推荐升级到兼容性更好的稳定版本,依赖配置如下:
<!-- Java Money 核心API --> <dependency> <groupId>javax.money</groupId> <artifactId>money-api</artifactId> <version>1.1</version> </dependency> <!-- Java Money 官方实现Moneta --> <dependency> <groupId>org.javamoney</groupId> <artifactId>moneta</artifactId> <version>1.4.2</version> </dependency>
- 如果需要使用汇率转换功能,额外增加转换扩展依赖:
<dependency> <groupId>org.javamoney</groupId> <artifactId>javamoney-conversion</artifactId> <version>1.4.2</version> </dependency>
- 执行Maven
clean命令清理旧的编译缓存,右键项目选择「Maven - Update Project」刷新依赖配置后重新运行项目即可。
内容的提问来源于stack exchange,提问作者Waleed Asif
相关产品推荐
相关产品推荐

