您的位置:首页 > 其它

如何解决包冲突,类加载错误的一个方法

2015-09-08 18:37 585 查看
今天碰到一个问题,使用activemq发送消息时一直报找不到方法:java.lang.NoSuchMethodError:org.slf4j.MDC.getCopyOfContextMap()Ljava/util/Map;,但是发现这个MDC类在activemq-all.jar中,查看源码确认是有这个方法,那肯定加载的不是这个包下的类。可那么多包怎么知道它加载了谁。使用下面代码即知:
import java.security.CodeSource;
import java.security.ProtectionDomain;
import org.springframework.util.StringUtils;
/**
*
查看加载的类的路径
*
*
这就是StringUtils这个类所在的jar包,一目了然。但是有一个限制经由系统类加载器所加载的类不能使用该方法来获取路径,
*
假如你对String类做上面的测试就会发生空指针异常,因为所得到的CodeSource为空,你可以在程序启动的时候使用
*
-verbose来查看系统类的装载信息,使用方式有如:
*
* java
-verbose MyApp
*
* @authoryicong
*/
public class CheckClassLoader {

public static void main(String[]args)
{
ProtectionDomainpd = StringUtils.class.getProtectionDomain();
CodeSourcecs =pd.getCodeSource();
System.out.println(cs.getLocation());
}
}
一看发现JavaEE 6.0 generic libraries中的bean-validtor.jar中有同路径的包,马上修改加载顺序即解决。
eclipse中可以设置类加载顺序,请见图。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: