请教一个关于 Maven 依赖冲突的问题

2018-06-05 19:09:35 +08:00
 tangshiba

我们项目使用的是 Spring Boot,它默认使用的 org.json 的依赖是 20140107 版本,项目需要接入阿里云的一个 sdk,这个项目中使用的 org.json 的版本是 20170516 的,新增了一些特性,实际调用的时候就会报 NoSuchMethod 的错误。

这种情况有没有什么解决办法?

谢谢。

2509 次点击
所在节点    Java
11 条回复
JavaFirstMaster
2018-06-05 19:20:19 +08:00
maven exclude 了解一下
tangshiba
2018-06-05 19:30:17 +08:00
@JavaFirstMaster 阿里云引用的版本比 Spring Boot 的高,在阿里云那里 exclude 的话还是会报错吧,又不好在 Spring Boot 里 exclude。
justicelove
2018-06-05 21:20:03 +08:00
版本仲裁就得决定使用一个版本,既然阿里云用了高版本的特性,那就仲裁掉低版本好了, 如果没有向下兼容,那就不好弄了
Foralrec
2018-06-05 21:28:09 +08:00
@tangshiba 取高版本,不行就拆开做个 proxy 单独部署. 再不就用 jvm 隔离的框架
FRankie222
2018-06-05 21:28:45 +08:00
@tangshiba springboot 里面的没法 exclexclude 吗?
wdlth
2018-06-05 21:31:05 +08:00
Spring Boot 的 org.json 不是 optional 的么……不显式引入是不包含的
yanjinbin
2018-06-05 21:35:09 +08:00
idea 有个插件叫 maven helper 你把低版本的 exclude 掉就可以了 nosuchmethoderror 通常是在新版本的新方法在低版本找不到 也就是实际引用的是低版本
lululau
2018-06-05 21:42:37 +08:00
难道不是声明一个对 org.json 新版的直接依赖更好吗
tangshiba
2018-06-05 22:40:53 +08:00
@justicelove 架构师不是很同意这么弄。
tangshiba
2018-06-05 22:48:10 +08:00
@wdlth 我明天去找找看,可能其他项目引用了。
billlee
2018-06-05 23:26:20 +08:00
在 <dependencyManagement> 中指定依赖新版本的 org.json

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/460661

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX