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

2018 年 6 月 5 日
 tangshiba

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

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

谢谢。

3360 次点击
所在节点    Java
11 条回复
JavaFirstMaster
2018 年 6 月 5 日
maven exclude 了解一下
tangshiba
2018 年 6 月 5 日
@JavaFirstMaster 阿里云引用的版本比 Spring Boot 的高,在阿里云那里 exclude 的话还是会报错吧,又不好在 Spring Boot 里 exclude。
justicelove
2018 年 6 月 5 日
版本仲裁就得决定使用一个版本,既然阿里云用了高版本的特性,那就仲裁掉低版本好了, 如果没有向下兼容,那就不好弄了
Foralrec
2018 年 6 月 5 日
@tangshiba 取高版本,不行就拆开做个 proxy 单独部署. 再不就用 jvm 隔离的框架
FRankie222
2018 年 6 月 5 日
@tangshiba springboot 里面的没法 exclexclude 吗?
wdlth
2018 年 6 月 5 日
Spring Boot 的 org.json 不是 optional 的么……不显式引入是不包含的
yanjinbin
2018 年 6 月 5 日
idea 有个插件叫 maven helper 你把低版本的 exclude 掉就可以了 nosuchmethoderror 通常是在新版本的新方法在低版本找不到 也就是实际引用的是低版本
lululau
2018 年 6 月 5 日
难道不是声明一个对 org.json 新版的直接依赖更好吗
tangshiba
2018 年 6 月 5 日
@justicelove 架构师不是很同意这么弄。
tangshiba
2018 年 6 月 5 日
@wdlth 我明天去找找看,可能其他项目引用了。
billlee
2018 年 6 月 5 日
在 <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