【jar包冲突】确定java类的加载jar包
jar包冲
java中经常遇到jar包冲突,程序启动时会提示“类找不到”或“方法找不到”,可以通过下面的方法来确认 程序启动所加载类的具体jar包,进行排查问题。
打印类所在jar包位置
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication .class, args);
//查询StringUtils类在哪个jar包中
ProtectionDomain pd = StringUtils.class.getProtectionDomain();
CodeSource cs = pd.getCodeSource();
System.out.println("StringUtils --->" + cs.getLocation());
}
}
打印效果:
StringUtils --->file:/F:/repository-hy/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar
这就是StringUtils这个类所在的jar包,一目了然。但是有一个限制经由系统类加载器所加载的类不能使用该方法来获取路径,假如你对 String类做上面的测试就会发生空指针异常,因为所得到的CodeSource为空,你可以在程序启动的时候使用-verbose来查看系统类的装载信息,使用方式有如:
java -verbose MyApp