您的位置:首页 > 编程语言 > Java开发

一个“java.lang.NoSuchMethodError”异常引发的思考

2013-10-18 14:22 106 查看
这几天一直很郁闷,我的系统在启动后,访问某个页面一直抛错:

ERROR impl.WebxRootControllerImpl - Error occurred while process request /auction/publish/publish.htm

java.lang.NoSuchMethodError: com.taobao.shopservice.client.tair.ShopTairManager.get(Ljava/lang/String;I)Ljava/lang/Object;

at com.taobao.shopservice.core.client.impl.TdbmShopCacheManager.getAllShopsByUserId(TdbmShopCacheManager.java:267)

at com.taobao.shopservice.core.client.impl.ShopReadServiceLocal.getAllShops(ShopReadServiceLocal.java:417)

at com.taobao.shopservice.core.client.impl.ShopReadServiceClient.getAllShops(ShopReadServiceClient.java:266)

at com.taobao.biz.core.shop.impl.DefaultShopCommonUseManager.isSellerHaveShop(DefaultShopCommonUseManager.java:29)

at com.taobao.web.auction.module.screen.publish.SelectCategory.execute(SelectCategory.java:167)

查看了一下代码,发现ShopTairManager该类在工程中有两个全限名相同的类,发现其中一个ShopTairManager类的方法为get(object object, int area),很明显应用加载了这个错误的了(见标红错误代码),使用了一个和参数不匹配的方法,最终导致抛出方法无法找到的错误。

和正则请教了一下具体的原理:maven中,在groupID和artifactID相同的情况下,高版本的jar会覆盖低版本的jar,但是我遇到的这种情况是,相同类的jar包其groupID是不同的,所以会出现加载两个jar包。

同时,在这种情况下,jboss加载class时是随机的,所以会出现我这里应用无法启动,而其他人能够启动应用的情况。

有一个想法,能不能在eclipse中做一个插件,把相同全限名的类都找出来,避免这种情况的产出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: