一点解决冲突的应急思路、怎样在所有jar包文件中搜索冲突的方法?

  maven是一个很好的项目管理工具,你可以轻松的定义一个引用,从而达到使用别人写好的库的作用。且maven可以轻松地和jenkins配合,从而使打包部署变得更容易。

  但是也因为这样,我们变得更傻瓜了,以致于有时候都忘了一些原始的基础的方法了,当然这不是本文的目的,本文的目的在于,如何解决一些maven带的冲突问题。

 

问题1: jenkins 打包失败了,导致我无法安装代码到测试环境,怎么办?

  答: 一般我们都会基于jenkins做一些二次开发,以适应公司内部的需求,或者优化一些修改化的东西。 但是由于jenkins本身还是比较复杂的,有时候难免我们搞不清楚其原理,从而导致一些无法打包的问题。 当然,我这边遇到的问题一般都是由于jenkins的缓存机制导致的问题,所以,在我本地可以打包的代码,放到jenkins上就死活打不了包,因为我依赖的一个jar包,由于被jenkins缓存了一个老版本的包,里面没有我新的东西从而导致打包失败,看起来短时间内无法解决这个缓存问题。

    于是,我通过本地ide工具打好war包后,上传到服务器的tomcat目录,等等tomcat自动部署完成后就可以重新启动新代码了,从而绕过了jenkins失败的问题了。 

    针对jar包,则更方便,直接本地生成jar包,然后替换服务器上的相应包,重启服务即可。

    总之,这里的解决方案就是,当工具出了问题的时候,我们就不能再依赖工具了,回到原始状态解决问题。

 

问题2: 当我们运行了代码(war/jar)后,报某个方法未找到,即:java.lang.NoSuchMethodError:, 仔细查看代码,其实是有该方法的,如何排查?

  答: 针对该问题,一般情况下都是由于引入了多个相同功能的jar包,且包路径完全一致,而在类加载器加载时,可能会加载到你不想要加载的类,从而导致没有该方法。

    解决办法就是,删除不是自己的引用,从而达到使用自己意图的类。maven中即表现为排除某个依赖,如:

<dependency> <groupId>com.xx.activity</groupId> <artifactId>abc</artifactId> <version>2.0.13-SNAPSHOT</version> <classifier>dubbo</classifier> <exclusions> <exclusion> <groupId>com.meidusa.venus</groupId> <artifactId>venus-backend</artifactId> </exclusion> </exclusions> </dependency>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwygwg.html