程序员记事---貌似不可能的可能
“今天真是阳光明媚的一天,这么好的天气就应该努力工作。”
早上出门的小明望着太阳,伸着懒腰,打着哈欠说道。
“hi,小明,早上好呀!吃什么呢,这么香!”小云看着端着打包盒的小明说道。
“没什么,炒粉而已,天天嗦粉,不嗦不行啊!”
“对了,领导待会找你有事,你九点半去下领导办公室。”
“好嘞,云姐,马上就去”
打完招呼的小明,光速吃完米粉之后,稍微收拾了下,去了领导办公室。
“小明啊,最近移动组项目比较紧急,就抽你去那支持下。对了,组长小石,待会会把材料交给你。”领导对着面前站立的小明说道。
“好的,李总!”小明恭敬的回答道。
“hi,石哥,刚才李总让我来分担下你的需求,我现在应该做什么呢?”
“哦,你现在先熟悉下编程环境,争取今天把项目跑起来!”
“那项目代码在那个svn下?”
“哦,就在平时移动组例会上分享的材料上面就有,我待会就转给你,你记得接受一下。”
“好嘞!”
拿到svn路径的小明,此时面临着一个困惑,上面显示有三个项目。
“诶,石哥,这个路径下面有三个项目啊,这怎么搞?”
“哦,这三个项目暂且就叫A、B、C项目吧,A和B项目都是maven项目,C项目是库lib依赖项目。A项目呢依赖B和C项目,你在编译配置上把B和C依赖上,就行了。”
“好的,石哥,我自己先去跑,还有不会的就再问你。”
说完这话,小明就独自去旁边,摆弄接受的新项目了。
“唉,奇了怪了,怎么老是报错啊!”
“那是maven配置出错了”一旁的小张说道。
“配置出错?”
“是啊,我们公司那么多项目,每个稍微大点的项目,maven仓库都是独立创建的,你的maven配置指向的是另一个项目组的仓库,jar包不匹配。”
"哦,原来是这样啊,那如何解决这个问题呢?"小明对旁边的小张说道。
“这样吧,石哥比较忙,我就先把移动组的maven-setting配置先给你吧!你先替换你之前的那个试试先。”
“好的,谢谢张哥了”
“哪里哪里!客气了“小张摆摆手说道。
于是,小明拿着小张给的setting重新配置项目,这次他希望能够把项目跑起来。
一个小时之后。
“诶,怎么回事啊,怎么没有标红报错,运行的时候就报错了呢?”看到这种错误的小明抓耳挠腮,百思不得其解。
“让我看看”一旁的小张听到小明这样说,连忙凑过身来看。
“哦。cause by : ClassNotFoundException:HashMap,XXX。这个错啊,这个HashMap不是jdk自带的类吗?抱着个错,可能是jkd版本不对,你的jdk是1.7。这个项目可能要1.8。”小张若有所思的说道。
“好的,我马上换成1.8的jdk版本。”小明回道。
半个小时过去了。
“怎么还是报一样的错误呢?”
没想到换了jdk版本,还是得到同样的结果。
“这个是什么错误?”隔个过道的小红问道。
“就是项目配置啥的都完整,也没报什么语法错误,就是不知为啥运行起来就报错。”小明对小红解释道。
“如果配置没错的话,jdk也没错,会不会是IDE本身的错误呢?上次我也碰到这钟类似的问题,怎么看好像都没什么问题,一运行起来,就报错,还是各种奇奇怪怪的错。然后找到老大解决,老大花了4个小时才把问题解决,说是eclipse配置有问题,最后把配置改好,就没什么问题了。”
“那我就换个IDE最新版本试试!”
说罢,小明就找最近的移动组同事要到了最新的编译器压缩包,压缩之后,按照先前的配置,一步一步的把项目重新搭了起来。
“我的天呐,怎么还是报了这个错误!”此时的小明就要发狂了,都想要把自己的头发都扯下来。
“发生了什么事,发那么大火?”听到暴躁小明的声音,前方的小马问道。
“我也不知道什么问题,项目都部署好了,就是运行报错,几种方法我都试过了,就是不行。真是气死我了。”小明忿忿道。
“哦,我看你主项目和依赖的项目都是maven项目,会不会包没有下完整?之前就碰到包没有下完整,调试一天的事”
“包没有下完整?”小明惊讶道,一般来说,公司内网的仓库来出来的jar包都很完整。一来是因为内网速度快,二来呢就是内网部署的仓库jar包都是市场上好的jar改良的。
"是啊,你把本地仓库的jar包删了,从新拉一份吧!"
“好的,多谢提醒”小明对小马谢道。
半个小时过去了,问题还是没有解决,依旧如初,此时的小明都不想干了,瘫倒在工位上。
这个时候,有一个娇小的实习女生慢吞吞的走到小明旁边,说道:
“学长,有没有可能,你主项目的jar包配置和依赖项目的jar包配置有冲突呢?导致初始化bean的时候,程序找不到相应的jar包?”
此声犹如惊雷,一下子把小明惊醒。
“对呀,我怎么没有想到呢?”小明如梦初醒,“谢谢你啊,小彭!”
“没事的,学长,这个是我们学习时就碰到的问题。”
听过小彭的提议,小明仔细检查过pom文件中的jar包配置,发现的确存在同名的jar包,但是版本不一样。删除完同名jar包后的小明说道,“这下总可以了吧!”
兴奋的小明,重新跑起了程序。
“嗯?怎么回事,怎么还是不行?”
又遇到挫折的小明,并没有像之前那样颓废,而是冷静的思考。
“应该就是jar包定位错误啊,去除同样的jar包之后,应该就不会有问题啊。再加上石哥之前说的项目依赖另外两个项目,一个是maven,一个就是lib项目,没有错啊!都是按照石哥说的做啊。”小明心中嘀咕道。
“等等!”此时的小明突然想到了什么。
“如果石哥说的话是错的,也许他很久没做忘了,或者记岔劈了,主项目没有依赖这两个项目的话。”想到这里,小明急忙忙的找到错误的debug语句,运用反编译工具,定位到报错的jar包。
然后,小明收起eclipse工作区,定眼一看。
“果然如此”小明松了一口气。
定位的jar包不在主项目,也不在依赖的maven项目,而是在第二个依赖的lib项目里面。而配置在主项目A中已经存在所需jar包,所以大家理所应当的认为,出错就在maven项目里。没想到最后错误竟然在被忽视的C项目中。
这样说来,石哥的话是错的。我们工作中,很多情况下,先入为主。总是认为交代给我们工作的人说的话永远没有错,查找错误也不会直接想要最开始的地方。也许,最开始给的推断条件就是个伪命题。
在经过多方研究,排除了一个又一个的错误原因之后。哪怕最后的结果再怎么令人难以相信,它也是事实的真相,永远在那里。