一个“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中做一个插件,把相同全限名的类都找出来,避免这种情况的产出。
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中做一个插件,把相同全限名的类都找出来,避免这种情况的产出。
相关文章推荐
- Java笔记(十六)……内部类
- java中list的基本用法
- java日期相加减
- 数组
- java基础-java相关技术的初识
- 安装Eclipse来编译Arduino
- java基础-多线程有哪些状态
- Myeclipse8插件FatJar安装与使用
- Java FckEditor 2.6+JSP的配置方法详解
- Java中泛型<?> 问号的作用
- 【Java工程师之路】[2-1.5]数据库事务处理
- 利用Eclipse对MAT进行分析解决JAVA内存问题
- eclipse中取消show in Breadcrumb方法
- 你应该知道的10种java正则表达式
- java知识点汇总
- java类的初始化顺序
- 单点登录原理和java实现简单的单点登录
- 对spring的理解
- 怎樣下載JAVA JDK的API幫助文檔壓縮包
- Eclipse中文语言包安装和设置中文Doc