java程序添加thrift 调用后,每次运行到要发http请求时,程序总是挂掉。由于发http请求这段代码没有改动,百思不得其解之时,调整了pom上关于thrift的包和httpclient包的依赖。再次测试ok了。
在网上搜索maven上jar包依赖顺序出错会导致什么问题, 下面是在文章中看到的,以作记录:
转自:https://www.cnblogs.com/shawWey/p/7417335.html
一、maven依赖原则
1.间接依赖路径最短优先
一个项目test依赖了a和b两个jar包。其中a-b-c1.0 , d-e-f-c1.1 。由于c1.0路径最短,所以项目test最后使用的是c1.0。
2.pom文件中申明顺序优先
有人就问了如果 a-b-c1.0 , d-e-c1.1 这样路径都一样怎么办?其实maven的作者也没那么傻,会以在pom文件中申明的顺序那选,如果pom文件中先申明了d再申明了a,test项目最后依赖的会是c1.1
所以maven依赖原则总结起来就两条:路径最短,申明顺序其次。
二、如何解决Jar冲突
通过mvn dependency:Hierarchy查看依赖及冲突关系。
omitted for conflict 表示遇到了冲突,且此版本被忽略。
遇到冲突的时候通过maven的依赖原则来调整坐标在pom文件的申明顺序是最好的办法。
方法二:依赖设置为全局使用
三、如何隔离一个Jar包
如何隔离一个jar包?有两个方法。
第一个很常用的exclusion来隔离jar包。
<exclusions> <exclusion> <groupId>com.ibm.icu</groupId> <artifactId>icu4j</artifactId> </exclusion> </exclusions>
第二个不常用的方法就是创建一个空包。
空包的坐标和你需要隔离的Jar包坐标一样,deploy的公司的私服上面。项目中这个空包申明在pom文件靠前的地方,这样依据maven依赖原则,这个空包会优先被使用,后面所有无论是直接依赖还是间接依赖的相同坐标的jar包都不会被使用了。
空包比exclusion的好处就是不用在所有间接依赖的地方去exclusion。
这个目前没尝试