欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

一点办理版本斗嘴的应急思路、 劳务派遣信息管理系统 奈何在所有 jar 包文件中搜索斗嘴的要领?

点击: 次  来源:宝鼎软件 时间:2018-01-16

原文出处: 等你回去来

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>

可是,尚有个问题,那就是如何才气找到是引用了哪个包,才导致的斗嘴呢?因为你从当地代码来看,没有一点异常。

我们可以直接搜索整个包的引用,并解开个中的代码,查察是斗嘴的类(斗嘴要领较量难找出来),虽然是直接在处事器长举办查找了。

find . -name '*.jar' -exec jar -tvf {} \; | grep EE   # 即找出所有的jar包,再解压出其文件列表,再搜索斗嘴的类名

假如有发明两个沟通的功效,那么就是斗嘴了,办理该斗嘴即可。

虽然,假如引入的jar文件不多,可能你有根基偏向猜疑是哪个包斗嘴了,那么,直接将该包下载下来,用反编译东西(如jd-gui)编译出来,查察其内部环境,便一目了然。

问题3: 发明tomcat启动异常快,并且许多加载流程都没有,就直接启动了,实际上各个应有的处事都不存在,这怎么排查?

答: 这种问题较量没有头绪,办理起来也根基靠命运。 这里tomcat看起来正常启动了,可是实际上许多工作都没做,没加载。从另一个角度来说,就是加载间断了。最贫苦的是日志中一点信息都不会给出。一般可以先从代码的窜改处开始排查,以一段一段的代码还原方法为主要排查手段。

个中有一很要害的问题就是,你引用了一个jdk版本比你本身的运行情况高的jar包,凭据jvm的加载道理,其会先查抄class文件的版本号,假如高于本身所能加载的版本,那么,它就直接拒绝加载了,而并不会查抄该class文件是否引用了一些不认识的特性。假如jvm不加载类了,那么你后续流程就无法举办了。

假如确实是因为jar包版本导致的问题,那么,劳务派遣管理系统,问题就好办理了。 1. 要么叫给你提供jar包的同学将其打包的jdk版本降到你需要的版本就可以了。 2. 进级本身的jvm运行情况,进级jdk, 虽然这个风险大概会有,小心行事。

以上,就是一点点问题排查心得,聊以宽慰。也但愿对有雷同的问题的同学指明一个偏向。

碰着问题的时候我们往往是这样,一个问题,大概几天下来也不必然能办理,可是到真正办理了的时候,发明其实很简朴。然后,也许下一次,又继承!